【问题标题】:Escape dot in a regex range正则表达式范围内的转义点
【发布时间】:2012-05-10 23:54:05
【问题描述】:

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

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

Demo

在第一个正则表达式中,我不会转义点(.),而在第二个正则表达式中我会(\.)。

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

【问题讨论】:

    标签: javascript regex replace


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 而减号(-)只有在范围的中间才需要转义?
      • 如果您想匹配连字符,请在打开方括号后立即添加,例如[-A-Z]。否则连字符指定范围。它适用于您的情况可能只是因为您没有在正则表达式中指定范围,但我建议您遵循参考,以防您稍后添加范围。
      • 或者在右括号之前,或者你可以用斜杠转义它
      【解决方案3】:

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

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

      【讨论】:

      • 今天这个人救了我。我不明白为什么这个表达式不起作用。谢谢
      【解决方案4】:

      this web page,我看到了:

      “请记住,点不是字符类中的元字符,因此我们不需要使用反斜杠对其进行转义。”

      所以我猜它的转义是不必要的......

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-11
        • 1970-01-01
        • 2021-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多