天天看點

c++ string replace_String.prototype.replaceAll 替換字元串新方法

c++ string replace_String.prototype.replaceAll 替換字元串新方法
通常我們使用JavaScript處理字元串的時候會使用replace方法。String.prototype.replace(searchValue, replacement)指定字元串及所需替換為某一字元串,最後傳回一個被替換過的字元串。那麼,接下來看看關于replaceAll()方法。

String.prototype.replaceAll 替換字元串新方法​www.deathghost.cn

c++ string replace_String.prototype.replaceAll 替換字元串新方法
原始方法

使用

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(' ')
"       "
           

看上去也還不錯,但總感覺别扭,拆分後又合并連接配接起來。

c++ string replace_String.prototype.replaceAll 替換字元串新方法

接下來,我們了解下新方法。

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支援情況

現代浏覽器最新版均可支援,具體檢視這裡。

繼續閱讀