JavaScript での複数の文字列の置換
文字列の置換は、プログラミングにおける一般的なタスクです。 JavaScript では、 replace() メソッドを使用すると、指定された文字列の 1 つの一致を新しい文字列に置き換えることができます。ただし、複数の文字列を同時に他の複数の文字列に置き換えたい場合はどうすればよいでしょうか?
次の例を考えてみましょう:
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 中国語 Web サイトの他の関連記事を参照してください。