90

出于某种原因,这两个正则表达式的行为方式相同:

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

演示

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

有什么区别以及为什么它们的行为相同?

4

4 回答 4

107

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

于 2012-05-01T13:05:28.633 回答
74

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

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

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

于 2012-05-01T13:04:40.733 回答
46

如果您使用 JavaScript 来测试您的正则表达式,请尝试\\.使用\..

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

于 2013-10-07T09:27:10.800 回答
5

这个网页上,我看到:

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

所以我想逃避它是不必要的......

于 2012-05-01T13:05:33.817 回答