js 中 replace 的第二個參數是函數時的函數參數解析


當replace() 方法的第二個參數 replacement是函數而不是字符串時,每次匹配都調用該函數,將這個函數的返回的字符串將作為替換文本使用。這個函數是自定義的替換規則。

 

當第二個參數是函數時,這個函數的前三個參數():

1、當正則沒有分組的時候,傳進去的第一個實參是正則捕獲到的內容,第二個參數是捕獲到的內容在原字符串中的索引位置,第三個參數是原字符串(輸入字符串)

2、當正則有分組的時候,第一個參數是總正則查找到的內容,后面依次是各個子正則查找到的內容。

2、傳完查找到的內容之后,再把總正則查找到的內容在原字符串中的索引傳進(就是arguments[0]str中的索引位置)。最后把輸入字符串(就是原字符串)傳進去

 

 

示例1

要求:找到字符串中的小寫字母,給它在后邊加上小括號來注明它在str字符串中的位置。比如str中的第一個a,它出現在str字符串的第一個索引位置中,則a變成a(1)。下面的str最終得到的結果是Xa(1)ZZc(4)Ud(6)Fe(8)

var str="XaZZcUdFe";

var reg=/[a-z]/g;//注意:全文替換必須加g

str=str.replace(reg,function(){

return arguments[0]+"("+arguments[1]+")";

//arguments.length的值是3,在reg沒有分組的情況下length屬性肯定是3.

//其中arguments[0]是正則捕獲查找到的內容;arguments[1]是正則查找到的內容在str這個字符串中的索引位置;arguments[2]是str字符串本身(叫輸入字符串)

//這個匿名函數被自動執行四次,每一次arguments里的值分別是:

//第一次:arguments[0]是a,arguments[1]是1,arguments[2]是原字符str本身

//第二次:arguments[0]是c,arguments[1]是4,arguments[2]是原字符str本身

//第三次:arguments[0]是,arguments[1]是6,arguments[2]是原字符str本身

//第四次:arguments[0]是e,arguments[1]是8,arguments[2]是原字符str本身

 

})

alert(str);//彈出 Xa(1)ZZc(4)Ud(6)Fe(8)

 

 

示例2

要求:找出下面字符串中兩個連着出現的數字,用它們的和將它們替換。

      比如第一次找到45,用9替換,第二次找到的是89,用17替換,第三次找到的是72,用9替換,最終生成的字符串是96a17b9cs

var str="456a89b72cs";

var reg=/(\d)(\d)/g;

str=str.replace(reg,function(){

return Number(arguments[1])+Number(arguments[2]);

});

alert(str);//彈出96a17b9cs

//上面replace里的匿名函數會被自動執行三次(因為匹配到了三次);

//每次執行,arguments.length都是5;arments[0]是總正則查找到的字符串,arguments[1]是第一個分組查找到的內容,arguments[2]是第二個分組查找到的內容,arguments[3]是總正則查找到的內容在str這個字符串中的索引位置,arguments[4]是str這個字符串本般

//第一次這五個參數的值分別是:arguments[0]是"45",arguments[1]是"4",arguments[2]是"5",arguments[3]是0,arguments[4]是"456a89b72cs";

//第二次這五個參數的值分別是:arguments[0]是"89",arguments[1]是"8",arguments[2]是"9",arguments[3]是4,arguments[4]是"456a89b72cs";

//第三次這五個參數的值分別是:arguments[0]是"45",arguments[1]是"4",arguments[2]是"5",arguments[3]是0,arguments[4]是"456a89b72cs"

 


免責聲明!

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



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