用变量替换JS中所有出现的字符串

34

我知道str.replace(/x/g, "y")替换字符串中的所有x,但我想做到这一点:

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

我如何在第一个参数中使用变量?

2个回答

64
< p> RegExp 构造函数接受一个字符串并将其转换为正则表达式。

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

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

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

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

请参考Javascript中是否有RegExp.escape函数?


2
如果replaceWhat包含正则表达式元字符,例如*+[,则此方法无法按预期工作。 - pts
如果按照提问者的意图使用,如果替换内容中出现元字符,将会得到错误的结果。因此最好选择另一个答案! - dronus
@dronus岂不是他在评论中所说的?dc5指出了一个解决方法。 - Barmar
是的,这正是pts所说的。但这并不意味着答案本身就是有效的...也许你想编辑一下? - dronus
1
@thatOneGuy 不错,我已经在函数中添加了return。显然,我只关注了正则表达式部分,而忽略了替换部分。 - Barmar
显示剩余4条评论

0

5
这是针对Firefox的,而在Chrome中它只会替换第一个出现的。 - pts
真的...它有“非标准”标志。 - Hogan
@Hogan,目前这个不起作用,请删除此答案或更新为可行的解决方案。 - Freddy Daniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接