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

时间:2012-05-01 13:01:17

标签: javascript regex replace

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

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

Demo

在第一个正则表达式中,我没有逃避点(.)而在第二个正则表达式中\.)。

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

4 个答案:

答案 0 :(得分:90)

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

答案 1 :(得分:52)

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

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

  

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

答案 2 :(得分:22)

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

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

答案 3 :(得分:5)

this web page上,我看到了:

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

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