JavaScript 中的多個字串替換
字串替換是程式設計中常見的任務。在 JavaScript 中,replace() 方法可讓您將指定字串的單一匹配項替換為新字串。但是,如果您想同時用多個其他字串替換多個字串怎麼辦?
考慮以下範例:
var str = "I have a cat, a dog, and a goat."; // Attempt to replace multiple strings with incorrect results str = str.replace(/cat/gi, "dog"); str = str.replace(/dog/gi, "goat"); str = str.replace(/goat/gi, "cat"); // Output: "I have a cat, a cat, and a cat"
如您所見,這不會產生所需的結果「我有一隻狗、一隻山羊和一隻貓」的結果。相反,它錯誤地將“cat”的每個實例替換為“dog”,依此類推。
特定解
要獲得所需的結果,您可以使用處理每個替換的函數:
var str = "I have a cat, a dog, and a goat."; var mapObj = { cat:"dog", dog:"goat", goat:"cat" }; str = str.replace(/cat|dog|goat/gi, function(matched){ return mapObj[matched]; }); // Output: "I have a dog, a goat, and a cat"
在這種方法中,我們建立一個定義鍵值對的地圖物件(mapObj)要替換的字串。然後,我們使用正規表示式來匹配這些字串中的任何一個,並將它們替換為地圖物件中的相應值。
概括解決方案
概括此方法,您可以根據需要動態建立正規表示式並更新映射物件:
var mapObj = {cat:"dog",dog:"goat",goat:"cat"}; var re = new RegExp(Object.keys(mapObj).join("|"),"gi"); str = str.replace(re, function(matched){ return mapObj[matched]; });
這種方法允許您新增或刪除替換對,而無需修改正規表示式本身。
可重複使用函數
為了進一步抽象化這個過程,您可以建立一個可重複使用函數:
function replaceAll(str,mapObj){ var re = new RegExp(Object.keys(mapObj).join("|"),"gi"); return str.replace(re, function(matched){ return mapObj[matched.toLowerCase()]; }); }
您可以然後使用此函數將任意給定字串中的多個字串替換為多個其他字串。
以上是如何在 JavaScript 中執行多個字串替換?的詳細內容。更多資訊請關注PHP中文網其他相關文章!