JavaScript 中字串的批次替換
在程式設計中經常出現用不同單字取代字串中多個單字的任務。考慮以下場景:
const str = "I have a cat, a dog, and a goat.";
我們希望透過將“cat”替換為“dog”,將“dog”替換為“goat”,將此字串轉換為“I have a dog, a goat , and a cat” ”,“山羊”與“貓”。
問題:連續替換導致錯誤輸出
天真的方法會涉及多次使用replace()方法:
str = str.replace(/cat/gi, "dog"); str = str.replace(/dog/gi, "goat"); str = str.replace(/goat/gi, "cat");
不幸的是,這段程式碼產生了錯誤的結果:「我有一隻貓,一隻貓和一隻貓」。這是因為第二次和第三次替換會覆蓋之前的更改。
解決方案:使用地圖和自定義替換函數
要解決此問題,我們需要一種更全面的方法來同時替換所有目標字。義包含被替換的地圖物件並使用自訂替換函數來實現:
const mapObj = { cat: "dog", dog: "goat", goat: "cat", }; const str = str.replace(/cat|dog|goat/gi, (matched) => { return mapObj[matched]; });
動態產生正規表示式模式
要解決此問題更通用的是,我們可以根據映射的鍵動態產生正規表示式模式object:
const re = new RegExp(Object.keys(mapObj).join("|"), "gi"); const str = str.replace(re, (matched) => { return mapObj[matched]; });
可重複使用的批次字串替換函數
最後,我們可以將這種方法封裝成一個可重用的函數:
const replaceAll = (str, mapObj) => { const re = new RegExp(Object.keys(mapObj).join("|"), "gi"); return str.replace(re, (matched) => { return mapObj[matched.toLowerCase()]; }); };
該函數接受一個字串和一個替換映射並傳回轉換後的字串。 JavaScript 中,有多種方法可以將多個字串替換為多個其他字串。
以上是如何在 JavaScript 中高效替換多個字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!