【问题标题】:RegEx for escaping special characters用于转义特殊字符的正则表达式
【发布时间】:2019-05-13 23:39:19
【问题描述】:

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

空

'*'之前会有反斜杠吗?它是否正确逃脱?为什么生成的正则表达式与文字表达式不同? 我无法弄清楚我从那个文档中遗漏了什么。

感谢您在此处指出错误的帮助!

【问题讨论】:

    标签: javascript regex escaping


    【解决方案1】:

    我的疑问是 [ \ ^ $ 。 | ? * + ( ) 所有这些都需要在传递 new RegExp() 之前被转义,或者只有 (反斜杠 \) 需要被转义。我不清楚哪一个需要逃跑或不逃跑?

    您的问题已在您所引用的文档部分的开头得到解答。再读一遍:

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

    反之,如果你需要任何特殊字符有它的特殊含义,你一定不能转义它。

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

    【讨论】:

    • 这个解释有助于我理解这个概念。不知何故,当我浏览文档时,我错过了理解。谢谢!
    【解决方案2】:

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

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

    【讨论】:

    • 感谢您的回复! document 中使用的转义函数“escapeRegExp”。我的疑问是 [ \ ^ $ 。 | ? * + ( ) 所有这些都需要在传递 new RegExp() 之前被转义,或者只有 (反斜杠 \) 需要被转义。我不清楚哪个需要逃跑或不逃跑?
    猜你喜欢
    • 2013-12-28
    • 1970-01-01
    • 2011-11-17
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多