【问题标题】:Do I need to escape dash character in regex? [duplicate]我需要在正则表达式中转义破折号吗? [复制]
【发布时间】:2016-02-21 13:15:08
【问题描述】:

我想了解破折号- 需要在正则表达式中使用反斜杠转义吗?

考虑一下:

var url     = '/user/1234-username';
var pattern = /\/(\d+)\-/;
var match   = pattern.exec(url);
var id      = match[1]; // 1234 

正如您在上面的正则表达式中看到的,我正在尝试从 url 中提取 id 的数量。我还使用反斜杠\ 在我的正则表达式中转义了- 字符。但是当我删除那个反斜杠时,一切都很好......!换句话说,这两个都很好:

现在我想知道,哪个是正确的(标准)?我需要在正则表达式中转义破折号吗?

【问题讨论】:

  • 我认为你只需要在破折号位于[] 内时转义它,但不确定。
  • 你没有回答自己的问题吗?
  • @jonrsharpe 你到底是什么意思?如果我知道答案,那我为什么要问呢?
  • 这是个好问题!那么为什么你问它,因为你已经向自己证明你不需要需要逃避那个破折号?

标签: javascript regex


【解决方案1】:

如果破折号可以被解释为范围指示符(character class 中的情况可能是这种情况),您只需要转义破折号。

/-/        # matches "-"
/[a-z]/    # matches any letter in the range between ASCII a and ASCII z
/[a\-z]/   # matches "a", "-" or "z"
/[a-]/     # matches "a" or "-"
/[-z]/     # matches "-" or "z"

【讨论】:

    【解决方案2】:

    - 仅在字符类 [] 内有意义,所以当你在它之外时,你不需要转义 -

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-29
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多