使用RegExp函数javascript替换包含反斜杠的子字符串

时间:2017-01-14 11:30:30

标签: javascript regex

我正在尝试编写一个用缩写替换某些单词的函数。例如,我有字符串:

str="Calculate $2\\cdot 2$"

我要替换

"\\cdot" 

"*" 

我的代码如下所示:

str = str.replace(RegExp("\\cdot",'g'),"*");

结果是

str = "Calculate $2\\cdot 2$"

我需要使用RegExp函数,因为我有一整个单词列表,我想用缩写替换。我知道

str = str.replace(/\\cdot/g),"*");

的工作原理。但我不明白为什么RegExp没有。

1 个答案:

答案 0 :(得分:2)

在定义String时需要转义斜杠字符,再次为正则表达式转义斜杠字符。如果您只是在String中转义一次斜杠,那么生成的正则表达式会是这样的:\cdot。如果使用斜杠表示法(/regex/)直接定义正则表达式,则只需要将其转义一次,因为没有String。

var str = "Calculate $2\\cdot 2$";
str = str.replace(RegExp("\\\\cdot",'g'),"*");
console.log(str);

如果您希望通常使用斜杠添加所有正则表达式特殊字符,则可以使用以下解决方案,该解决方案依赖于this answer。你仍然必须逃避反斜杠一次,因为它是String的一部分。如果从某个地方获取String,它将被正确转义。如果您明确地将String写入代码(var string = "string";)。

,这是唯一必要的

var str = "Calculate $2\\cdot 2$";
var regex = "\\cdot";
str = str.replace(RegExp(escapeRegExp(regex), 'g'),"*");
console.log(str);

function escapeRegExp(str) {
    return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}