文字列が与えられた場合:
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);
}