1. 程式人生 > 實用技巧 >js 如何全部替代一個子串為另一個子串

js 如何全部替代一個子串為另一個子串

更多描述: 假設有一個字串 `hello. hello. hello. ` 需要替換為 `AAA`,即把 `hello. ` 替換為 `A`

如果需要全量替換字串,可以使用String.prototype.replace(re, replacer),其中正則表示式需要開啟globalflag

const s = 'foo foo foo'
s.replce(/foo/g, 'bar')

那如題中,是否可以使用正則表示式來替代子串

答:不可以,因為使用子串構建正則時,有可能有特殊字元,就有可能出現問題,如下

// 期待結果: 'AhelloX hello3 '
> 'hello. helloX hello3 '.replace(new
RegExp('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中,目前支援性不好