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