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

gdo*_*ica 68 javascript regex replace

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

"43\\gf..--.65".replace(/[^\d.-]/g, "");?  // 43..--.65
"43\\gf..--.65".replace(/[^\d\.-]/g, "");?  // 43..--.65
Run Code Online (Sandbox Code Playgroud)

演示

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

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

jba*_*bey 93

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


uso*_*ban 56

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

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

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

  • 只有当它在范围的中间时,才需要转义减号(`-`)? (6认同)
  • 如果要匹配连字符,请在打开方括号后立即添加,例如[-AZ]。否则,连字符指定范围。在您的情况下它起作用仅是因为您未在正则表达式中指定范围,但我建议您遵循参考,以防稍后添加范围。 (2认同)
  • 或者在关闭括号之前,或者你可以用斜线逃脱它 (2认同)

MMi*_*lav 27

如果您使用JavaScript来测试您的正则表达式,请尝试\\.代替\..

它的行为方式相同,因为JS删除了第一个反斜杠.

  • 今天这个人救了我。我不明白为什么这个表达式不起作用。谢谢 (3认同)

Rob*_*b I 5

这个网页上,我看到:

"请记住,点不是字符类中的元字符,所以我们不需要用反斜杠来逃避它."

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