【JavaScript】検索文字列を全置換する方法【replaceAll】

最初の検索文字しか置き換わらない

標準の方法では一番最初にマッチした文字列のみが置き換えられます。replaceFirst的な挙動ですね。

"a b c".replace(' ', '-');  // "a-b c"

全て置き換え

一致したテキスト全てを置き換えたい場合は、正規表現を用いる必要があります。

"a b c".replace(/ /g, '-');  // "a-b-c"

gでグローバルサーチ/グローバルマッチを行っている所が肝です。これで一致した全ての文字が置換えの対象になります。replaceAllやgsub的な置換えが実現されるわけですね。JavaScriptにはreplaceAllメソッドがないためこのようなテクニックが必要となります。

正規表現の記法に注意

正規表現を用いる際には、.*等の特殊な文字に対して、バックスラッシュ\文字によるエスケープ処理が必要になるので注意してください。

"a.b.c".replace(/\./g, '-');  // "a-b-c"

空文字による置換を実現する場合

空文字による置き換えを行う場合には、正規表現リテラルは利用できないため、代わりにRegExpオブジェクトを用いる必要があります。

"ab".replace(new RegExp("", 'g'), "-") // "-a-b-"
"ab".replace(//g, "-") // Uncaught SyntaxError: Unexpected end of input

split joinイディオム

split関数とjoin関数のあわせ技でも同等の全置換が実現できます。

"a b c".split(' ').join('-');  // "a-b-c"

解説

splitは文字列の分割結果を配列形式で返す関数です。そしてその結果をjoinメソッドで結合しています。

"a b c".split(' ')        // ["a", "b", "c"]
["a", "b", "c"].join('-') // "a-b-c"
広告
広告