1. 程式人生 > 其它 >來擷取位址列引數

來擷取位址列引數

 

前端框架中,utils.js檔案是用來存放自己封裝工具類函式的,是一個共享的方法。(這個方法可以放在utils.js裡,作為公共方法使用)

濤哥:
let access_token = this.getQueryString("access_token");

getQueryString (name) {
      var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
      var r = window.location.search.substr(1).match(reg);
      
if (r != null) { return unescape(decodeURI(r[2])); } return null; },
百度:
  getQuery (query) {
    // 建立一個含有目標引數的正則表示式物件
    const reg = new RegExp('(^|&)' + query + '=([^&]*)(&|$)')
    // 匹配目標引數
    const res = window.location.search.substr(1).match(reg) || window.location.hash.substring((window.location.hash.search(/\?/)) + 1).match(reg)
    
if (res != null) { return decodeURIComponent(res[2]) //輸出返回值! } }

1、正則 const reg = new RegExp(’(^|&)’ + query + ‘=([^&]*)(&|$)’)   詳解:

const reg = new RegExp('(^|&)' + query + '=([^&]*)(&|$)')
//宣告一個全域性匹配,忽略大小寫的正則 正則內容由regStr決定 g代表全域性搜尋,i代表忽略大小寫 ignore case
1:const reg=new RegExp(regStr,"gi");
2:^name //匹配任何開頭以name的字串
3:'(^|&)' //匹配以&開頭或者空白開頭的字串
4:'(^|&)' + query //匹配任何以&query開頭 或者 以空白query開頭的字串
//本質上來說前面空白就是什麼都沒有,就是URL中某個引數
5:[^&] //匹配除了&以外的任意字元,就是一旦在出現了&,就是另外一個新的引數了,就不繼續匹配
6:([^&]*) //匹配任意數量的 除了&以外的字元 如果query後面有&就停止匹配
7:(&|$) //同理,匹配任何以&結尾 或者 空白結尾的引數
8: ([^&]*)(&|$) //匹配以 & 開頭之外的任意多個引數值,並且遇到&或者空白就停止
//遇到 & 說明到下一個引數了,也就是該引數在中間的情況,遇到 空白 說明沒有值了,也就是該引數為最後一個引數

2、完整解釋:

const reg = new RegExp('(^|&)' + query + '=([^&]*)(&|$)')
//匹配以 query= 開頭或者以  query=  開頭,中間為任意多個除了&以外的字元,一旦遇到& 或者空白 就停止匹配

3、使用例項:

  this.test = utils.getQuery('url')
 //通過utils工具類下封裝的獲取url引數方法getQuery來獲取裡面的引數  以url開頭或者&url開頭...
若位址列URL為:abc.html?id=123&url=http://www.maidq.com
alert(utils.getQuery("url")); 
  會彈出一個對話方塊:內容就是 http:
//www.maidq.com
alert(utils.getQuery("id"));
  那麼彈出的內容就是
123 啦;