js 如何全部替代一個子串為另一個子串
阿新 • • 發佈:2020-07-28
更多描述: 假設有一個字串 `hello. hello. hello. ` 需要替換為 `AAA`,即把 `hello. ` 替換為 `A`
如果需要全量替換字串,可以使用String.prototype.replace(re, replacer)
,其中正則表示式需要開啟global
flag
const s = 'foo foo foo'
s.replce(/foo/g, 'bar')
那如題中,是否可以使用正則表示式來替代子串
答:不可以,因為使用子串構建正則時,有可能有特殊字元,就有可能出現問題,如下
// 期待結果: 'AhelloX hello3 ' > 'hello. helloX hello3 '.replace(newRegExp('hello. ', 'g'), 'A') < "AAA"
而在javascript
中替換子串只能使用一種巧妙的辦法:str.split('foo').join('bar')
> 'hello. hello. hello. '.split('hello. ').join('A')
< "AAA"
真是一個巧(笨)妙(拙)的辦法啊!!!!!大概 TC39 也意識到了一個問題,於是出了一個新的 API,在ESNext
中
String.prototype.replaceAll() 'aabbcc'.replaceAll('b', '.'); // 'aa..cc'
詳細文件在String.prototype.replaceAll
總結(及直接答案)
兩種辦法
str.split('foo').join('bar')
str.replaceAll('foo', 'bar')
,在ESNext
中,目前支援性不好