來擷取位址列引數
阿新 • • 發佈:2022-03-18
前端框架中,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 啦;