String.prototype.replace()
replace() 方法返回一個(gè)由替換值(replacement)替換一些或所有匹配的模式(pattern)后的新字符串啊掏。模式可以是一個(gè)字符串或者一個(gè)正則表達(dá)式,替換值可以是一個(gè)字符串或者一個(gè)每次匹配都要調(diào)用的回調(diào)函數(shù)。
const p = 'The quick brown fox jumps over the lazy dog. If the dog reacted, was it really lazy?';
const regex = /dog/gi;
console.log(p.replace(regex, 'ferret'));
// expected output: "The quick brown fox jumps over the lazy ferret. If the ferret reacted, was it really lazy?"
console.log(p.replace('dog', 'monkey'));
// expected output: "The quick brown fox jumps over the lazy monkey. If the dog reacted, was it really lazy?"
語法
str.replace(regexp|substr, newSubStr|function)
參數(shù)
regexp (pattern)
一個(gè)RegExp 對(duì)象或者其字面量腾窝。該正則所匹配的內(nèi)容會(huì)被第二個(gè)參數(shù)的返回值替換掉资厉。
substr (pattern)
一個(gè)將被 newSubStr 替換的 字符串晋被。其被視為一整個(gè)字符串潜秋,而不是一個(gè)正則表達(dá)式恨溜。僅第一個(gè)匹配項(xiàng)會(huì)被替換垃杖。
newSubStr (replacement)
用于替換掉第一個(gè)參數(shù)在原字符串中的匹配部分的字符串男杈。該字符串中可以內(nèi)插一些特殊的變量名。參考下面的使用字符串作為參數(shù)调俘。
function (replacement)
一個(gè)用來創(chuàng)建新子字符串的函數(shù)伶棒,該函數(shù)的返回值將替換掉第一個(gè)參數(shù)匹配到的結(jié)果。參考下面的指定一個(gè)函數(shù)作為參數(shù)彩库。
返回值
一個(gè)部分或全部匹配由替代模式所取代的新的字符串肤无。
描述
該方法并不改變調(diào)用它的字符串本身,而只是返回一個(gè)新的替換后的字符串骇钦。
在進(jìn)行全局的搜索替換時(shí)宛渐,正則表達(dá)式需包含 g 標(biāo)志。
使用字符串作為參數(shù)
替換字符串可以插入下面的特殊變量名:
變量名 | 代表的值 |
---|---|
$$ | 插入一個(gè) "$"眯搭。 |
$& | 插入匹配的子串窥翩。 |
$` | 插入當(dāng)前匹配的子串左邊的內(nèi)容。 |
$' | 插入當(dāng)前匹配的子串右邊的內(nèi)容鳞仙。 |
$n | 假如第一個(gè)參數(shù)是 RegExp對(duì)象寇蚊,并且 n 是個(gè)小于100的非負(fù)整數(shù),那么插入第 n 個(gè)括號(hào)匹配的字符串棍好。提示:索引是從1開始 |
指定一個(gè)函數(shù)作為參數(shù)
你可以指定一個(gè)函數(shù)作為第二個(gè)參數(shù)仗岸。在這種情況下允耿,當(dāng)匹配執(zhí)行后,該函數(shù)就會(huì)執(zhí)行扒怖。 函數(shù)的返回值作為替換字符串右犹。 (注意:上面提到的特殊替換參數(shù)在這里不能被使用。) 另外要注意的是姚垃,如果第一個(gè)參數(shù)是正則表達(dá)式念链,并且其為全局匹配模式,那么這個(gè)方法將被多次調(diào)用积糯,每次匹配都會(huì)被調(diào)用掂墓。
下面是該函數(shù)的參數(shù):
變量名 | 代表的值 |
---|---|
match | 匹配的子串。(對(duì)應(yīng)于上述的$&看成。) |
p1,p2, ... | 假如replace()方法的第一個(gè)參數(shù)是一個(gè)RegExp 對(duì)象君编,則代表第n個(gè)括號(hào)匹配的字符串。(對(duì)應(yīng)于上述的2等吃嘿。)例如,如果是用 /(\a+)(\b+)/ 這個(gè)來匹配梦重,p1 就是匹配的 \a+兑燥,p2 就是匹配的 \b+。 |
offset | 匹配到的子字符串在原字符串中的偏移量琴拧。(比如降瞳,如果原字符串是 'abcd',匹配到的子字符串是 'bc'蚓胸,那么這個(gè)參數(shù)將會(huì)是 1) |
string | 被匹配的原字符串挣饥。 |
NamedCaptureGroup | 命名捕獲組匹配的對(duì)象 |
(精確的參數(shù)個(gè)數(shù)依賴于 replace() 的第一個(gè)參數(shù)是否是一個(gè)正則表達(dá)式(RegExp)對(duì)象,以及這個(gè)正則表達(dá)式中指定了多少個(gè)括號(hào)子串沛膳,如果這個(gè)正則表達(dá)式里使用了命名捕獲扔枫, 還會(huì)添加一個(gè)命名捕獲的對(duì)象)
下面的例子將會(huì)使 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 - #$*%
示例
在 replace() 中使用正則表達(dá)式
在下面的例子中,replace()中使用了正則表達(dá)式及忽略大小寫標(biāo)示锹安。
var str = 'Twas the night before Xmas...';
var newstr = str.replace(/xmas/i, 'Christmas');
console.log(newstr); // Twas the night before Christmas...
交換字符串中的兩個(gè)單詞
var re = /(\w+)\s(\w+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2, $1");
// Smith, John
console.log(newstr);