也說JavaScript中String類的replace函數

來源:互聯網
上載者:User

對回呼函數的參數說明也很準確:
第一個參數是匹配到的字串,最後一個是原字串,倒數第二個參數是匹配到的字串的在原字串索引的起始位。
但我很好奇,第二到倒數第三之間的參數又是些什麼呢?其實,W3school已經給出了答案: 複製代碼 代碼如下:replace() 方法用於在字串中用一些字元替換另一些字元,或替換一個與Regex匹配的子串。其文法為:
stringObject.replace(regexp/substr,replacement)
replacement 可以是字串,也可以是函數。如果它是字串,那麼每個匹配都將由字串替換。
ECMAScript v3 規定,replace() 方法的參數 replacement 可以是函數而不是字串。在這種情況下,每個匹配都調用該函
數,它返回的字串將作為替換文本使用。該函數的第一個參數是匹配模式的字串。接下來的參數是與模式中的子運算式匹配的
字串,可以有 0 個或多個這樣的參數。接下來的參數是一個整數,聲明了匹配在 stringObject 中出現的位置。最後一個參數
是 stringObject 本身。

顯然,replacement函數的第二到倒數第三之間的參數是“與模式中的子運算式匹配的字串”,具體個數起決於子運算式的個數。
據此,我們舉兩個例子來對比說明:
例1:
字串:"CJ9080"
匹配模式為:/CJ[0-9]{2}/g (無子運算式)
預期結果:
replacement函數有3個參數,分別為:
【0】“CJ90”
【1】0
【2】“CJ9080”
測試代碼: 複製代碼 代碼如下:function replaceStr(s) {
return s.replace(/CJ[0-9]{2}/g,
function(){
for (var i = 0, len = arguments.length; i < len; i++) {
console.info("Argument " + i + ": " + arguments[i]);
}
});
};

運行結果:

例2:
字串:"CJ9080"
匹配模式為:/((CJ)([0-9]{2}))/g (有3個子運算式:(CJ[0-9]{2}), (CJ), ([0-9]{2}))
預期結果:
replacement函數有6個參數,分別為:
【0】 "CJ90"
【1】 "CJ90"
【2】 "CJ"
【3】 "90"
【4】 0
【5】 "CJ9080"
測試代碼: 複製代碼 代碼如下:function replaceStr(s) {
return s.replace(/((CJ)([0-9]{2}))/g,
function(){
for (var i = 0, len = arguments.length; i < len; i++) {
console.info("Argument " + i + ": " + arguments[i]);
}
});
};

運行結果:

顯然,兩個測試例子結果均與預期一致。說明,當replace函數的replacement為函數時,此函數的參數各位確如W3school所言:

【0】:匹配模式的字串;
【1 - (length - 3)】: 與模式中的子運算式匹配的字串, 0個或多個;
【length - 2】:匹配串在原字串的索引起始位置,從0開始;
【length - 1】:原字串。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.