逃生点的正则表达式范围(Escape dot in a regex range)

2019-06-24 02:33发布

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

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

演示

在第一个正则表达式,我不逃避点( . ),而在第二个正则表达式怎么办?( \. )。

有什么区别,为什么他们的行为是否相同?

Answer 1:

因为该点是内部字符类(方括号[]

看看http://www.regular-expressions.info/reference.html ,它说(根据焦炭类部分):

除了^任何字符 - ] \该字符添加到该字符类可能的匹配。



Answer 2:

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



Answer 3:

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

它作用于以同样的方式,因为JS除去第一个反斜杠。



Answer 4:

在这个网页上 ,我看到:

“请记住,点是不是一个字符类中的元字符,所以我们并不需要用反斜杠逃脱它。”

所以我想它的逃逸是不必要的?



文章来源: Escape dot in a regex range