web-dev-qa-db-ja.com

変数を使用して文字列のすべての出現をJSで置き換える

str.replace(/x/g, "y")が文字列内のすべてのxを置き換えることを知っていますが、これを行いたいです

function name(str,replaceWhat,replaceTo){
    str.replace(/replaceWhat/g,replaceTo);
}

最初の引数で変数を使用するにはどうすればよいですか?

26
usama8800

RegExpコンストラクタは文字列を受け取り、それから正規表現を作成します。

function name(str,replaceWhat,replaceTo){
    var re = new RegExp(replaceWhat, 'g');
    return str.replace(re,replaceTo);
}

replaceWhatに正規表現で特殊な文字が含まれている可能性がある場合は、次のようにできます。

function name(str,replaceWhat,replaceTo){
    replaceWhat = replaceWhat.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
    var re = new RegExp(replaceWhat, 'g');
    return str.replace(re,replaceTo);
}

参照 JavascriptにRegExp.escape関数はありますか?

47
Barmar

以下のフラグの3番目のパラメータは数年前にブラウザから削除されたため、この回答は不要になりました。フラグなしでグローバルに機能するようになりました


Replaceには、3つのパラメーターを取り、文字列を受け入れる代替フォームがあります。

function name(str,replaceWhat,replaceTo){
    str.replace(replaceWhat,replaceTo,"g");
}

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

1
Hogan