JavaScript で文字列のすべての出現箇所を置換するにはどうすればいいですか? 質問する

JavaScript で文字列のすべての出現箇所を置換するにはどうすればいいですか? 質問する

文字列が与えられた場合:

string = "Test abc test test abc test test test abc test test abc";

abcこれは、上記の文字列内の の最初の出現のみを削除するようです。

string = string.replace('abc', '');

出現箇所をすべて置き換えるにはどうすればよいでしょうか?

ベストアンサー1

2020年8月現在: 最新のブラウザはサポートされていますのためにString.replaceAll()方法ECMAScript 2021 言語仕様で定義されています。


古いブラウザの場合:

function escapeRegExp(string) {
  return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
}

function replaceAll(str, find, replace) {
  return str.replace(new RegExp(escapeRegExp(find), 'g'), replace);
}

この答えは次のように展開しました。

str = str.replace(/abc/g, '');

「'abc' が変数として渡されたらどうなるでしょうか?」というコメントへの返答:

var find = 'abc';
var re = new RegExp(find, 'g');

str = str.replace(re, '');

に応答して「賛成」をクリックのコメントでは、さらに簡略化することもできます。

function replaceAll(str, find, replace) {
  return str.replace(new RegExp(find, 'g'), replace);
}

注意:find正規表現には特殊文字(メタ文字)が含まれるため、これらの文字をエスケープする前処理を行わずに上記の関数に引数を渡すのは危険です。これについては、Mozilla 開発者ネットワーク正規表現に関する JavaScript ガイド、そこでは、次のユーティリティ関数が提示されています (この回答が最初に書かれてから少なくとも 2 回変更されているため、更新の可能性については MDN サイトを確認してください)。

function escapeRegExp(string) {
  return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
}

したがって、上記の関数をより安全にするためにreplaceAll()、以下も含めると次のように変更できますescapeRegExp

function replaceAll(str, find, replace) {
  return str.replace(new RegExp(escapeRegExp(find), 'g'), replace);
}

おすすめ記事