// 地址欄傳參 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"]