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