地址欄傳參

// 地址欄傳參
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"]
相關文章
相關標籤/搜索