用正則表達式獲取URL中的查詢參數


總結獲取url中查詢參數的兩種方式

通過正則表達式獲取單個參數

url中的所有查詢參數可以通過 window.location.search 字段獲取,以字符串的形式返回。並有固定的格式 ?param1=value1&param2=value2···,所以可以正則表達式匹配。

分析下需要匹配的格式:

  • param=value, 其中需要獲取的是value部分,但是也需要 param= 參與匹配,但是不能參與返回結果,這里有前后查找的問題
  • ?param=value&param=value 都可能存在,參數名稱緊跟在?&之后;還要注意的是,要區分 emalimail 這種名稱,/mail/既能匹配到email又能匹配mail,所以要給參數名稱加一個邊界,名稱的上一個字符要是一個非單詞(\W)的字符,這樣就可以解決這兩個問題
  • value后可能是空,也可能是下一組參數(以&分割),所以value的值要匹配到[^&]為止
  • 由於參數名稱是變化的,所以需要用字符串的形式來生成正則表達式

前后查找和邊界的介紹可以細看MDN中的詳細介紹。

搞定正則之后,使用string的match方法,就能直接獲取到對應的參數值

function getUrlParamsByName(name) {
    // \b 邊界   
    // ?<= 向后匹配 
    // 字符串轉成正則表達式,其中的'\b'類型的特殊字符要多加一個'\'
	let reg = new RegExp(`(?<=\\b${name}=)[^&]*`),
	str = location.search || '',
	target = str.match(reg);
	
	if(target) {
		return target[0]
	}

	return;
}

解析所有參數,以對象返回

上一個方法是獲取單個的參數值,此方法是為了解析出所有的參數

利用string的一些工具函數取值,注意一些異常場景的判斷

function getUrlParams() {
	let obj = {};

	if (!window) {
		return; 
	}

  let str = window.location.search || '';
  
  if (str && str.slice(1)) {
     // 去掉 ? ,然后以 & 分割
    let queryArray = str.slice(1).split('&');
    queryArray.map((query) => {
      // param=value 以 = 分割
      let temp = query.split('=');
      if(temp.length > 1) {
      // 收集參數
      obj[temp[0]] = temp[1];
      }
    })
  }

	return obj;
}

總結

正則表達式的方式更加靈活便捷啊,開始用的時候不習慣,后來覺得真香!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM