字符串對象的`replace`方法可以替換匹配的值。它接受兩個參數,第一個是正則表達式,表示搜索模式,第二個是替換的內容。
~~~
str.replace(search, replacement)
~~~
正則表達式如果不加`g`修飾符,就替換第一個匹配成功的值,否則替換所有匹配成功的值。
~~~
'aaa'.replace('a', 'b') // "baa"
'aaa'.replace(/a/, 'b') // "baa"
'aaa'.replace(/a/g, 'b') // "bbb"
~~~
上面代碼中,最后一個正則表達式使用了`g`修飾符,導致所有的`a`都被替換掉了。
`replace`方法的一個應用,就是消除字符串首尾兩端的空格。
~~~
var str = ' #id div.class ';
str.replace(/^\s+|\s+$/g, '')
// "#id div.class"
~~~
`replace`方法的第二個參數可以使用美元符號`$`,用來指代所替換的內容。
* `$&`:匹配的子字符串。
* \`$\`\`:匹配結果前面的文本。
* `$'`:匹配結果后面的文本。
* `$n`:匹配成功的第`n`組內容,`n`是從1開始的自然數。
* `$$`:指代美元符號`$`。
~~~
'hello world'.replace(/(\w+)\s(\w+)/, '$2 $1')
// "world hello"
'abc'.replace('b', '[$`-$&-$\']')
// "a[a-b-c]c"
~~~
上面代碼中,第一個例子是將匹配的組互換位置,第二個例子是改寫匹配的值。
`replace`方法的第二個參數還可以是一個函數,將每一個匹配內容替換為函數返回值。
~~~
'3 and 5'.replace(/[0-9]+/g, function (match) {
return 2 * match;
})
// "6 and 10"
var a = 'The quick brown fox jumped over the lazy dog.';
var pattern = /quick|brown|lazy/ig;
a.replace(pattern, function replacer(match) {
return match.toUpperCase();
});
// The QUICK BROWN fox jumped over the LAZY dog.
~~~
作為`replace`方法第二個參數的替換函數,可以接受多個參數。其中,第一個參數是捕捉到的內容,第二個參數是捕捉到的組匹配(有多少個組匹配,就有多少個對應的參數)。此外,最后還可以添加兩個參數,倒數第二個參數是捕捉到的內容在整個字符串中的位置(比如從第五個位置開始),最后一個參數是原字符串。下面是一個網頁模板替換的例子。
~~~
var prices = {
'p1': '$1.99',
'p2': '$9.99',
'p3': '$5.00'
};
var template = '<span id="p1"></span>'
+ '<span id="p2"></span>'
+ '<span id="p3"></span>';
template.replace(
/(<span id=")(.*?)(">)(<\/span>)/g,
function(match, $1, $2, $3, $4){
return $1 + $2 + $3 + prices[$2] + $4;
}
);
// "<span id="p1">$1.99</span><span id="p2">$9.99</span><span id="p3">$5.00</span>"
~~~
上面代碼的捕捉模式中,有四個括號,所以會產生四個組匹配,在匹配函數中用`$1`到`$4`表示。匹配函數的作用是將價格插入模板中。
- 第一章:變量與作用域
- 第一節:變量
- 第二節:執行環境及作用域
- 第三節:JS 解析機制
- 第四節:垃圾收集
- 第二章:深入函數
- 第一節:概述
- 第二節:函數聲明
- 第三節:函數調用
- 第四節:函數參數
- 第五節:函數返回值
- 第三章:面向對象
- 第一節:概述
- 第二節:對象聲明
- 第三節:this 關鍵字
- 第四節:對象遍歷
- 第五節:對象繼承
- 第六節:模塊
- 第四章:正則表達式
- 第一節:概述
- 第二節:實例屬性
- 第三節:實例方法
- 第一課時:測試
- 第二課時:執行
- 第四節:匹配規則
- 第一課時:字面量字符和元字符
- 第二課時:轉義符
- 第三課時:特殊字符
- 第四課時:字符類
- 第五課時:預定義模式
- 第六課時:重復類
- 第七課時:量詞符
- 第八課時:貪婪模式
- 第九課時:修飾符
- 第十課時:組匹配
- 第五節:字符串的實例方法
- 第一課時:匹配
- 第二課時:搜索
- 第三課時:替換
- 第四課時:分割