``` ``` ...
// 地址欄傳參
function getLocation() {
// 獲取地址欄參數
var str = location.search;
// var str = "?name='zs'&age=18&sex='man'";
// 解碼
str = decodeURI(str);
// 切割去除?[slice切割字元串]
str = str.slice(1);
// 將字元串分割為數組【split()】
var arr = str.split("&");
var obj = {};
// 遍曆數組獲取鍵值
arr.forEach(function(v, i) {
var key = v.split("=")[0];
var value = v.split("=")[1];
obj[key] = value;
});
return obj;
}
console.log(getLocation());
function getLocation(k) {
// 獲取地址欄參數
var str = location.search;
// 解碼
str = decodeURI(str);
// 切割去除?[slice切割字元串]
str = str.slice(1);
// 將字元串分割為數組【split()】
var arr = str.split("&");
var obj = {};
// 遍曆數組獲取鍵值
arr.forEach(function(v, i) {
var key = v.split("=")[0];
var value = v.split("=")[1];
obj[key] = value;
});
return obj[k];
}
console.log(getLocation("name"));
// 將url的查詢參數解析成字典對象
// 因為url允許用戶隨意輸入,如果用拆字元的方式,有任何一處沒有考慮到容錯,就會導致整個js都報錯。而正則就沒有這個問題,他只匹配出正確的配對,非法的全部過濾掉,簡單,方便。
function getQueryObject(url) {
url = url == null ? window.location.href : url;
// substring(start,end)截取字元串,取不到end,所以+1
var search = url.substring(url.indexOf("?") + 1);
// console.log(typeof(search));
// console.log(search);
var obj = {};
// 前後的斜杠/是正則表達式的分隔符,最後的g表示全局匹配,匹配到第一個之後不會停下來,會繼續匹配,
// ():標記一個子表達式的開始與結束位置
// [:標記一個中括弧表達式的開始。要匹配 [,請使用 \[。
// [^]表示字元類取反,比如[^abc]匹配的就是不是a和b和c的單個字元,[^?&=]匹配不是^和?和=的單個字元.
// 字元類[]後面的+和*表示量詞:
// + 等價於 {1,} 重覆1次或多次
// * 等價於 {0,} 重覆0次或多次
var reg = /([^?&=]+)=([^?&=]*)/g;
// 替換:replace(需要替換,替換值)
/*第二個參數可傳入函數,會對每個匹配到的字元串'rs'做一次處理,然後你可以將結果return 出來*/
search.replace(reg, function(rs, $1, $2) {
console.log($1);
console.log($2);
// 解碼轉為中文
// decodeURIComponent() 函數可對 encodeURIComponent() 函數編碼的 URI 進行解碼。
var name = decodeURIComponent($1);
var val = decodeURIComponent($2);
// String(s);
// 參數 s 是要存儲在 String 對象中或轉換成原始字元串的值。
// console.log(name);
// console.log(val);
val = String(val);
obj[name] = val;
console.log(rs);
// obj[decodeURIComponent($1)]=decodeURIComponent($2)
return rs;
});
return obj;
}
console.log(getQueryObject());
// "http://www.cnblogs.com/leee/p/4456840.html?name=ls&age=28&sex=man"
// Object {name: "1", dd: "ddd**"}
// 正則解析;
var reg = /([^?&=]+)=([^?&=]*)/g;
var str = "foo=bar&lang=js";
var reg = /[^?&=]{1,}=[^?&=]{0,}/;
console.log(str.match(reg)); //輸出 ["foo=bar"]
var str = "foo=bar&lang=js";
var reg = /[^?&=]{1,}=[^?&=]{0,}/g;
console.log(str.match(reg)); //輸出 ["foo=bar", "lang=js"]
var str = "foo=bar&lang=js";
var reg = /([^?&=]{1,})=([^?&=]{0,})/;
console.log(str.match(reg)); //輸出 ["foo=bar", "foo", "bar"]