2013-12-23 10 views
5

私はこれを試しました:Replace multiple strings at once そしてこれは:javascript replace globally with arrayどのように動作していません。一度に複数の文字列をJavascriptのRegexで置き換えよう

私は(そのPHP)これに似て行うことができます。

$a = array('a','o','e'); 
$b = array('1','2','3'); 
str_replace($a,$b,'stackoverflow'); 

この結果は、次のようになります。

st1ck2v3rfl2w 

私は同時に正規表現を使用します。どうやってやるの ? ありがとうございます。

答えて

9
var str = "I have a cat, a dog, and a goat."; 
var mapObj = { 
    cat:"dog", 
    dog:"goat", 
    goat:"cat" 
}; 
str = str.replace(/cat|dog|goat/gi, function(matched){ 
    return mapObj[matched]; 
}); 

Check fiddle

+0

ありがとうございます。 – Ayro

+0

ようこそ@Ayro !! –

5

一つの可能​​な解決策:@Stephen M. Harrisからのコメントを1として

var a = ['a','o','e'], 
    b = ['1','2','3']; 

'stackoverflow'.replace(new RegExp(a.join('|'), 'g'), function(c) { 
    return b[a.indexOf(c)]; 
}); 

は、ここでは別のよりフールプルーフソリューションです:

'stackoverflow'.replace(new RegExp(a.map(function(x) { 
    return x.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); 
}).join('|'), 'g'), function(c) { 
    return b[a.indexOf(c)]; 
}); 

NB:を確認してください必要に応じてindexOfメソッドの場合は、polyfillを使用します。

+0

ありがとう、それは働いています。 – Ayro

+1

これは受け入れられる回答である必要があります。 – Carcamano

+0

検索文字列に特別な正規表現の文字が含まれていると、これが破損する可能性があります。ここでは、改良されたバージョン(およびクロスブラウザーを使用したポリフィルもあります)http://stackoverflow.com/a/37949642/445295 –

関連する問題