尝试RegExp生成用于字符串匹配的正则表达式。与docs中指定的转义混淆了。每当使用RegExp构造函数类型输入字符串时,都需要使用该文档中提供的函数进行转义。
正确使用文字方法
"test".match(/te*/gi)
输出:
['te','t']
当我尝试使用RegExp构造函数进行相同操作时,输出会有所不同。
rg="te*"
function escapeRegExp(str) {
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}
exp = new RegExp(escapeRegExp(rg),'gi')
console.log("exp =>", exp);
console.log("test".match(exp));
输出:
exp => / te * / gi
空
'*'之前是否会有反斜杠?是否正确逃脱了?为什么生成的正则表达式与文字表达式不同? 我无法弄清楚该文档中缺少的内容。
我非常感谢您指出此处的错误帮助!
答案 0 :(得分:1)
因为您不想转义*
-这是一个正则表达式字符:
const temp = "te*";
const reg = new RegExp(temp, "gi");
console.log("test".match(reg));
答案 1 :(得分:1)
我的疑问是 [\ ^ $。 | ? * +()所有这些都需要在传递新的RegExp()之前进行转义,或者仅需要单独转义(反斜杠\)。我不清楚哪个需要逃避还是不逃避?
您所参考的文档部分的开头就回答了您的问题。再读一遍:
如果您需要按字面意义使用任何特殊字符(例如,实际上是搜索“ *”),则必须对其进行转义...
相反,如果您需要任何特殊字符来具有其特殊含义,则不得转义。
除上述内容外,如果从字符串 literal 分配,则要放在字符串中的任何反斜杠都必须加倍。