在 JavaScript 中替換字串的所有例項
-
使用
String.prototype.replaceAll()
內建 JavaScript 函式替換字串的所有出現 -
使用帶有
g
標誌的正規表示式來替換 JavaScript 中字串的所有出現 -
對舊版瀏覽器或出於相容性原因使用
split()
和join()
JavaScript 允許你使用幾種方法替換字串中所有出現的字元或子字串。
並非所有方法在速度和資源利用率方面都相同,因此在決定最佳方法之前明確定義你的用例非常重要。此外,最佳解決方案取決於你所針對的瀏覽器,或者更準確地說,取決於瀏覽器版本。
因此,較舊的瀏覽器可能無法理解新引入的 JavaScript 功能。例如,replaceAll
方法是最簡單和最推薦的選項,但它不適用於任何 Internet Explorer 版本。值得慶幸的是,還有其他方法可以在舊版瀏覽器中實現相同的結果,如下所述。
使用 String.prototype.replaceAll()
內建 JavaScript 函式替換字串的所有出現
它是迄今為止 JavaScript 中最直接的解決方案,特別是因為它是標準庫的一部分。你不需要從頭開始建立自己的函式,而且這種方法也比大多數其他實現要快得多。
const my_string = "abc 123 abc 456 abc 789 abc";
console.log(my_string.replaceAll("abc", "xyz"));
輸出:
"xyz 123 xyz 456 xyz 789 xyz"
使用 String.prototype.replaceAll()
方法將替換字串作為變數傳遞
上面的示例要求你手動輸入原始字串和替換字串作為函式引數。如果你想將替換字串作為變數傳遞,你可以使用以下方法:
const my_string = "abc 123 abc 456 abc 789 abc";
let rep_string = "xyz";
console.log(my_string.replaceAll("abc", rep_string));
輸出:
"xyz 123 xyz 456 xyz 789 xyz"
事實上,你也可以將兩個引數作為變數傳遞。如你所料,你需要做的就是建立另一個變數來儲存要替換的子字串,然後將其作為 replaceAll
方法的第一個引數傳遞。
const my_string = "abc 123 abc 456 abc 789 abc";
let substring = "abc";
let rep_string = "xyz";
console.log(my_string.replaceAll(substring, rep_string));
輸出:
"xyz 123 xyz 456 xyz 789 xyz"
使用帶有 g
標誌的正規表示式來替換 JavaScript 中字串的所有出現
獲得相同結果的另一種方法是使用帶有 g
標誌和 replace()
方法的正規表示式。使用此方法的缺點是速度可能較慢,因此如果執行速度是你的應用程式的優先考慮因素,請儘量避免這種情況。
g
標誌代表 global
,如果沒有它,如果你嘗試執行它,程式碼將丟擲 TypeError
。在使用正規表示式物件和 replace()
方法時,這是一項要求。
const my_string = "abc 123 abc 456 abc 789 abc";
let new_string = my_string.replace(/abc/g, "xyz");
console.log(new_string)
輸出:
"xyz 123 xyz 456 xyz 789 xyz"
對舊版瀏覽器或出於相容性原因使用 split()
和 join()
如上所述,舊瀏覽器可能無法理解新的 JavaScript 功能,就像 replaceAll()
方法一樣。在這些情況下,你可以通過拆分和連線字串來獲得相同的結果。
請記住,在優化方面這是一個非常糟糕的解決方案,因此如果你的程式碼不適合與舊軟體相容,請避免使用此方法。
const my_string = "abc 123 abc 456 abc 789 abc";
let new_string = my_string.split("abc").join("xyz");
console.log(new_string);
輸出:
"xyz 123 xyz 456 xyz 789 xyz"
很明顯,一般的解決方案包括使用 split()
來搜尋你要搜尋的字串,使用 join()
來替換你要替換的字串。為了使事情更清楚,這裡是你可以將原始字串和替換字串作為變數傳遞而不是硬編碼它們的方法:
const my_string = "abc 123 abc 456 abc 789 abc";
original_string = "abc";
replacement_string = "xyz";
let new_string = my_string.split(original_string).join(replacement_string);
console.log(new_string);
輸出:
"xyz 123 xyz 456 xyz 789 xyz"