在正则expression式范围内转义点

由于某种原因,这两个正则expression式的作用是一样的:

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

演示

在第一个正则expression式中,我不会在第二个正则expression式( \. )中转义点( \. )。

有什么区别,为什么他们采取相同的行为?

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

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

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

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

如果您使用JavaScript来testing您的正则expression式,请尝试\\. 而不是\.

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

在这个网页上 ,我看到:

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

所以我想逃避它是没有必要的