出于某种原因,这两个正则表达式的行为方式相同:
"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 ,它说(根据焦炭类部分):
除了^任何字符 - ] \该字符添加到该字符类可能的匹配。
点运算符.
不需要字符类内进行转义[]
如果您使用JavaScript来测试你的正则表达式,尝试\\.
而不是\.
。
它作用于以同样的方式,因为JS除去第一个反斜杠。
在这个网页上 ,我看到:
“请记住,点是不是一个字符类中的元字符,所以我们并不需要用反斜杠逃脱它。”
所以我想它的逃逸是不必要的?