正则表达式,用于转义特殊字符

时间:2019-05-13 23:39:20

标签: javascript regex escaping

尝试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

     

'*'之前是否会有反斜杠?是否正确逃脱了?为什么生成的正则表达式与文字表达式不同? 我无法弄清楚该文档中缺少的内容。

我非常感谢您指出此处的错误帮助!

2 个答案:

答案 0 :(得分:1)

因为您不想转义*-这是一个正则表达式字符:

const temp = "te*";
const reg = new RegExp(temp, "gi");
console.log("test".match(reg));

答案 1 :(得分:1)

  

我的疑问是 [\ ^ $。 | ? * +()所有这些都需要在传递新的RegExp()之前进行转义,或者仅需要单独转义(反斜杠\)。我不清楚哪个需要逃避还是不逃避?

您所参考的文档部分的开头就回答了您的问题。再读一遍:

  

如果您需要按字面意义使用任何特殊字符(例如,实际上是搜索“ *”),则必须对其进行转义...

相反,如果您需要任何特殊字符来具有其特殊含义,则不得转义。

除上述内容外,如果从字符串 literal 分配,则要放在字符串中的任何反斜杠都必须加倍。