我正在尝试编写一个用缩写替换某些单词的函数。例如,我有字符串:
str="Calculate $2\\cdot 2$"
我要替换
"\\cdot"
带
"*"
我的代码如下所示:
str = str.replace(RegExp("\\cdot",'g'),"*");
结果是
str = "Calculate $2\\cdot 2$"
我需要使用RegExp函数,因为我有一整个单词列表,我想用缩写替换。我知道
str = str.replace(/\\cdot/g),"*");
的工作原理。但我不明白为什么RegExp没有。
答案 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, "\\$&");
}