正则表达式范围内的转义点

Escape dot in a regex range

本文关键字:转义 范围内 正则表达式      更新时间:2023-09-26

这两个正则表达式的行为方式相同:

var str = "43gf''..--.65";
console.log(str.replace(/[^'d.-]/g, ""));
console.log(str.replace(/[^'d'.-]/g, ""));

在第一个正则表达式中,我不转义点( . ),而在第二个正则表达式中,我转义( '. )。

有什么区别?为什么结果是一样的?

点运算符.不需要在字符类[] 中进行转义。

因为点在字符类内(方括号[])。

看看 http://www.regular-expressions.info/reference.html,它说(在字符类部分下):

除 ^-]'' 以外的任何字符将该字符添加到可能的匹配项中 对于字符类。

如果您使用 JavaScript 来测试正则表达式,请尝试 ''. 而不是 '.

它以相同的方式工作,因为JS删除了第一个反斜杠。

在 regular-expressions.info 上,它指出:

请记住,点不是字符类中的元字符,所以我们不需要用反斜杠来转义它。

所以我想逃跑是不必要的...