31

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

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

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

4

2 回答 2

61

构造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 函数?

于 2013-07-23T20:09:19.153 回答
0

几年前从浏览器中删除了下面标志的第三个参数,不再需要这个答案 - 现在替换没有标志的全局作品


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

于 2013-07-23T20:11:09.223 回答