![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5COhNGNiVjNzITMwEWM1UWNjFWY4ADOjZmNykzNzkTYw8CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
通常我們使用JavaScript處理字元串的時候會使用replace方法。String.prototype.replace(searchValue, replacement)指定字元串及所需替換為某一字元串,最後傳回一個被替換過的字元串。那麼,接下來看看關于replaceAll()方法。
String.prototype.replaceAll 替換字元串新方法www.deathghost.cn
使用
replace()
方法後,我們常見的一個問題就是
replace()
不能替換所有指定的字元串。因為它僅替換第一次出現的子字元串。
'abbc'.replace('b', '_');
// 輸出則是: "a_bc"
' '.replace(' ', ' ')
// 輸出:
我們可以看到僅替換了第一個字元串。那麼,對于開發人員通常會使用帶有global(g)标志的正規表達式進行處理。
' '.replace(/ /g, ' ')
// 輸出:" "
對于前端開發人員而言,這是一種方法,但若複雜一點,很容出錯,也比較麻煩。
另外一種方法就是使用
stringObject.split(separator,howmany)
結合
arrayObject.join(separator)
方法處理。
// 如:将中間的加号“+”替換為空。
's=a+b+c'.split('+').join(' ');
// 則輸出:"s=a b c"
' '.split(' ').join(' ')
" "
看上去也還不錯,但總感覺别扭,拆分後又合并連接配接起來。
接下來,我們了解下新方法。
String.prototype.replaceAll 新方法新方法
replaceAll()
可以解決上面所述問題,字面意思我們也可以了解,并提供了一種簡單的機制來執行全局子字元串替換。
' '.replaceAll(' ', ' ')
// 輸出:" "
's=a+b+c'.replaceAll('+', ' ');
// => "s=a b c"
為了與現有API保持一緻,其
String.prototype.replaceAll(searchValue, replacement)
處理方式與
String.prototype.replace(searchValue, replacement)
完全相同。
是以,String.prototype.replaceAll通過提供對全局字元串替換,而無需使用正規表達式或其他解決方法。
特殊替換方式// 第一種
'abcde'.replaceAll('c', '$$')
// 第二種
'abcde'.replaceAll('c', '$&')
結果是:
// 第一種輸出結果
"ab$de" 而非 "ab$$de"
// 第二種輸出結果
"abcde" 而非 "ab$&de"
浏覽器String.prototype.replaceAll支援情況
現代浏覽器最新版均可支援,具體檢視這裡。