JavaScript String Replace All

在 JavaScript 使用 String.replace 時要注意它可能和你預期的行為不同,當你想取代某個字串時,你會發現 replace 只取代了第一個字串,例如 “AAA”.replace(“A”, “B”),你預期會得到 “BBB” 但實際上你會得到的是 “BAA”,這是因為 JS replace 的第一個參數其實是 Regex 而非字串,如果你輸入字串,就只會取代第一個遇到的字串,導致和預期不同的問題。

要解決 JS String.replace 不會取代全部字串的問題很簡單,只要用正規表達去寫即可,例如:

# BBB
"AAA".replace(/A/g, "B");

# HiHi
"{msg}{msg}".replace(/{msg}/g, "Hi");

像這樣用正規表達的斜線夾住你要搜尋的字串,並加上 g 參數即可,但也因為前面的搜尋參數是正規表達,所以某些特殊符號需要跳脫,例如下面的語法就會出錯:

# [HiHiHi][HiHiHi]
"[msg][msg]".replace(/[msg]/g, "Hi")

會這樣是因為中括號 [] 在正規表達式裡面有他的特殊含義,像這樣的情況可以加上反斜線,改寫成下面的形式:

# HiHi
"[msg][msg]".replace(/\[msg\]/g, "Hi")

在〈JavaScript String Replace All〉中有 1 則留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料