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


76

由于某些原因,这两个正则表达式的行为相同:

"43\\gf..--.65".replace(/[^\d.-]/g, "");​  // 43..--.65
"43\\gf..--.65".replace(/[^\d\.-]/g, "");​  // 43..--.65

演示版

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

有什么区别,为什么它们表现相同?

Answers:


61

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

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

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


7
而minus(-)仅在范围中间时才需要转义?
gdoron支持Monica's 2012年

3
如果要匹配连字符,请在打开方括号后立即添加,例如[-AZ]。否则,连字符指定范围。在您的情况下它起作用仅可能是因为您未在正则表达式中指定范围,但是我建议您遵循该参考,以防稍后添加范围。
usoban

3
或紧接在右括号之前,或者您可以使用斜线将其转义
赛马会

98

点运算符.不需要在字符类内部转义[]


34

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

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


3
今天这个救了我。我不知道为什么该表达式不起作用。谢谢
马丁斯Radiņš

4

此网页上,我看到:

“请记住,点不是字符类中的元字符,因此我们不需要使用反斜杠对其进行转义。”

所以我想转义是不必要的...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.