處理url中參數的方法

  var str = 'https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-4813362722.8.2edb121051X9Na&id=572138214418'
    function getUrlParams(str) {
        str = str || window.location.href
        if(typeof str !== 'string') return;
        var params = {};
        str.replace(/[?&]+([^=&]+)=([^&#]*)/gi, function(m,key,value) {
            params[key] = value;
        })
        return params;
    }

你可以指定一個函數作爲replace的第二個參數。在這種情況下,當匹配執行後,該函數就會執行。 函數的返回值作爲替換字符串。 (注意:上面提到的特殊替換參數在這裏不能被使用。) 另外要注意的是,如果第一個參數是正則表達式,並且其爲全局匹配模式,那麼這個方法將被多次調用,每次匹配都會被調用。

下面是該函數的參數:

變量名 代表的值
match 匹配的子串。(對應於上述的$&。)
p1,p2, ...

假如replace()方法的第一個參數是一個RegExp 對象,則代表第n個括號匹配的字符串。(對應於上述的$1,$2等。)例如,如果是用 /(\a+)(\b+)/ 這個來匹配,p1 就是匹配的 \a+p2 就是匹配的 \b+

offset

匹配到的子字符串在原字符串中的偏移量。(比如,如果原字符串是 'abcd',匹配到的子字符串是 'bc',那麼這個參數將會是 1)

string 被匹配的原字符串。
NamedCaptureGroup 命名捕獲組匹配的對象

(精確的參數個數依賴於 replace() 的第一個參數是否是一個正則表達式(RegExp)對象,以及這個正則表達式中指定了多少個括號子串,如果這個正則表達式裏使用了命名捕獲, 還會添加一個命名捕獲的對象)

下面的例子將會使 newString 變成 'abc - 12345 - #$*%'

function replacer(match, p1, p2, p3, offset, string) {
  // p1 is nondigits, p2 digits, and p3 non-alphanumerics
  return [p1, p2, p3].join(' - ');
}
var newString = 'abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/, replacer);
console.log(newString);  // abc - 12345 - #$*%

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章