也說JavaScript中String類的replace函數(shù)
更新時間:2011年09月22日 23:57:54 作者:
最近讀了sharpxiajun的博文《javascript筆記--String類replace函數(shù)的一些事》,感覺寫的很好,很有幫助。
對回調(diào)函數(shù)的參數(shù)說明也很準確:
第一個參數(shù)是匹配到的字符串,最后一個是原字符串,倒數(shù)第二個參數(shù)是匹配到的字符串的在原字符串索引的起始位。
但我很好奇,第二到倒數(shù)第三之間的參數(shù)又是些什么呢?其實,W3school已經(jīng)給出了答案:
replace() 方法用于在字符串中用一些字符替換另一些字符,或替換一個與正則表達式匹配的子串。其語法為:
stringObject.replace(regexp/substr,replacement)
replacement 可以是字符串,也可以是函數(shù)。如果它是字符串,那么每個匹配都將由字符串替換。
ECMAScript v3 規(guī)定,replace() 方法的參數(shù) replacement 可以是函數(shù)而不是字符串。在這種情況下,每個匹配都調(diào)用該函
數(shù),它返回的字符串將作為替換文本使用。該函數(shù)的第一個參數(shù)是匹配模式的字符串。接下來的參數(shù)是與模式中的子表達式匹配的
字符串,可以有 0 個或多個這樣的參數(shù)。接下來的參數(shù)是一個整數(shù),聲明了匹配在 stringObject 中出現(xiàn)的位置。最后一個參數(shù)
是 stringObject 本身。
顯然,replacement函數(shù)的第二到倒數(shù)第三之間的參數(shù)是“與模式中的子表達式匹配的字符串”,具體個數(shù)起決于子表達式的個數(shù)。
據(jù)此,我們舉兩個例子來對比說明:
例1:
字符串:"CJ9080"
匹配模式為:/CJ[0-9]{2}/g (無子表達式)
預期結(jié)果:
replacement函數(shù)有3個參數(shù),分別為:
【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]);
}
});
};
運行結(jié)果:
例2:
字符串:"CJ9080"
匹配模式為:/((CJ)([0-9]{2}))/g (有3個子表達式:(CJ[0-9]{2}), (CJ), ([0-9]{2}))
預期結(jié)果:
replacement函數(shù)有6個參數(shù),分別為:
【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]);
}
});
};
運行結(jié)果:
顯然,兩個測試例子結(jié)果均與預期一致。說明,當replace函數(shù)的replacement為函數(shù)時,此函數(shù)的參數(shù)各位確如W3school所言:
【0】:匹配模式的字符串;
【1 - (length - 3)】: 與模式中的子表達式匹配的字符串, 0個或多個;
【length - 2】:匹配串在原字符串的索引起始位置,從0開始;
【length - 1】:原字符串。
第一個參數(shù)是匹配到的字符串,最后一個是原字符串,倒數(shù)第二個參數(shù)是匹配到的字符串的在原字符串索引的起始位。
但我很好奇,第二到倒數(shù)第三之間的參數(shù)又是些什么呢?其實,W3school已經(jīng)給出了答案:
復制代碼 代碼如下:
replace() 方法用于在字符串中用一些字符替換另一些字符,或替換一個與正則表達式匹配的子串。其語法為:
stringObject.replace(regexp/substr,replacement)
replacement 可以是字符串,也可以是函數(shù)。如果它是字符串,那么每個匹配都將由字符串替換。
ECMAScript v3 規(guī)定,replace() 方法的參數(shù) replacement 可以是函數(shù)而不是字符串。在這種情況下,每個匹配都調(diào)用該函
數(shù),它返回的字符串將作為替換文本使用。該函數(shù)的第一個參數(shù)是匹配模式的字符串。接下來的參數(shù)是與模式中的子表達式匹配的
字符串,可以有 0 個或多個這樣的參數(shù)。接下來的參數(shù)是一個整數(shù),聲明了匹配在 stringObject 中出現(xiàn)的位置。最后一個參數(shù)
是 stringObject 本身。
顯然,replacement函數(shù)的第二到倒數(shù)第三之間的參數(shù)是“與模式中的子表達式匹配的字符串”,具體個數(shù)起決于子表達式的個數(shù)。
據(jù)此,我們舉兩個例子來對比說明:
例1:
字符串:"CJ9080"
匹配模式為:/CJ[0-9]{2}/g (無子表達式)
預期結(jié)果:
replacement函數(shù)有3個參數(shù),分別為:
【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]);
}
});
};
運行結(jié)果:
例2:
字符串:"CJ9080"
匹配模式為:/((CJ)([0-9]{2}))/g (有3個子表達式:(CJ[0-9]{2}), (CJ), ([0-9]{2}))
預期結(jié)果:
replacement函數(shù)有6個參數(shù),分別為:
【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]);
}
});
};
運行結(jié)果:
顯然,兩個測試例子結(jié)果均與預期一致。說明,當replace函數(shù)的replacement為函數(shù)時,此函數(shù)的參數(shù)各位確如W3school所言:
【0】:匹配模式的字符串;
【1 - (length - 3)】: 與模式中的子表達式匹配的字符串, 0個或多個;
【length - 2】:匹配串在原字符串的索引起始位置,從0開始;
【length - 1】:原字符串。
相關(guān)文章
使用JavaScript為一張圖片設(shè)置備選路徑的方法
在做網(wǎng)頁開發(fā)的時候,有時候希望給圖片設(shè)置一個備選路徑,即,當src屬性對應(yīng)的主路徑加載失敗的時候,圖片可以馬上切換到備選路徑,怎么實現(xiàn)呢?下面通過本文給大家分享JavaScript為一張圖片設(shè)置備選路徑的方法,一起看看吧2017-01-01uniapp中全局頁面掛載組件實戰(zhàn)過程(小程序)
這篇文章主要給大家介紹了關(guān)于uniapp中全局頁面掛載組件(小程序)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家學習或者使用uniapp具有一定的參考學習價值,需要的朋友可以參考下2022-12-12