JavaScriptのreplace()と文字列置換

JavaScriptで文字列置換を行うreplace()は、「一つ目の引数(検索文字列)で指定した文字列を検索し、一致した最初の部分文字列を二つ目の引数(置換文字列)で指定した文字列に置換する」関数です。たとえば、

var s = "aaxxbbxxccxxddxxee".replace("xx","yy"));

とすると、sには「最初のxxをyyに置換」した文字列「aayybbxxccxxddxxee」が入ります。

ただ、文字列の置換処理を行う場合は「最初の一致部分」ではなく「文字列内のすべての一致部分」を置換したい場合がほとんどではないでしょうか。実際、Javaなど他言語ではreplace()は「文字列内のすべての検索文字列」を置換する機能を持っている場合が多いわけです。

JavaScriptのreplace()は、あまり使う場面がないのが現実だと思います。

JavaScriptですべての部分文字列をreplaceする

JavaScriptですべての部分文字列を置換するには、文字列を配列に分割した上で再統合する方法があります。具体的には、まず指定のトークン文字列で文字列を分割するsplit()を使って文字列を検索文字列で分割します。

var ss = "aaxxbbxxccxxddxxee".split("xx");

のようにするわけですね。これで配列ssには、検索文字列xxで分割した結果({aa,bb,cc,dd,ee})が格納されます。

次に、以下のコードのように「指定の文字列を挟みながら配列を一つの文字列に統合する」join()を使って配列をまとめると・・・「全ての検索文字列(xx)を置換文字列(yy)に置換した文字列(aayybbyyccyyddyyee)」ができるわけです。

var s = ss.join("yy");

試しにWebブラウザのアドレス欄で以下のJavaScriptのコードを実行してみましょう。

javascript:alert("aayybbyyccyyddyyee".split("xx").join("yy"))

今度は、望み通りすべてのxxがyyに置換されましたね。