出于某种原因,这两个正则表达式的行为方式相同:
"43\\gf..--.65".replace(/[^\d.-]/g, ""); // 43..--.65
"43\\gf..--.65".replace(/[^\d\.-]/g, ""); // 43..--.65
在第一个正则表达式中,我没有逃避点(.
)而在第二个正则表达式中\.
)。
有什么区别以及为什么它们的行为相同?
答案 0 :(得分:90)
点运算符.
不需要在字符类[]
内转义。
答案 1 :(得分:52)
因为点在字符类(方括号[]
)内。
看看http://www.regular-expressions.info/reference.html,它说(在char类部分下):
除^ - ]之外的任何字符都将该字符添加到可能的匹配项中 为角色类。
答案 2 :(得分:22)
如果您使用JavaScript测试正则表达式,请尝试\\.
而不是\.
。
它以相同的方式起作用,因为JS删除了第一个反斜杠。
答案 3 :(得分:5)