2013-07-23 26 views
10

我知道str.replace(/x/g, "y")替换所有X的字符串中的,但我想这样做JS使用可变

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

如何使用第一个参数变量替换字符串的所有出现?

回答

24

RegExp构造函数接受一个字符串,并创建一个正则表达式出来。

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

如果replaceWhat可能包含在正则表达式的特殊字符,你可以这样做:

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

Is there a RegExp.escape function in Javascript?

+1

这并不如预期工作,如果replaceWhat包含正则表达式元字符,例如'*','+','''。 – pts

+0

@pts所以做了字面上的正则表达式。 – Barmar

+0

然后添加这个逻辑:[Javascript中是否有RegExp.escape函数?](http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript) – dc5