【问题标题】:What does the '|' (pipe character) mean in a regular expression? [duplicate]'|' 是什么意思(管道字符)在正则表达式中是什么意思? [复制]
【发布时间】:2023-03-10 16:19:01
【问题描述】:

这个正则表达式来自JQuery,|表示or,但是包含哪两个部分可以选择呢?

/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/

[^>]*$ | #([\w\-]*)$(<[\w\W]+>)[^>]*$ | #([\w\-]*)$) 还是别的什么?

【问题讨论】:

标签: javascript jquery regex


【解决方案1】:

[^#<]*(<[\w\W]+>)[^>]*$#([\w\-]*)$

Debuggex Demo

【讨论】:

    【解决方案2】:

    简单地说:x|y

    匹配xy

    例如:/green|red/ 匹配 green apple 中的 greenred apple. 中的 red

    See regular expression on mdn

    【讨论】:

    【解决方案3】:

    用缩进写成多行有助于:

    ^
    (?:
      [^#<]*
      (
        <
        [\w\W]+
        >
      )
      [^>]*
      $
    |
      #
      (
        [\w\-]*
      )
      $
    )
    

    你的第二个猜测是正确的。 | 的优先级低于串联(即一个接一个地写表达式)。

    【讨论】:

      【解决方案4】:

      它是[^#&lt;]*(&lt;[\w\W]+&gt;)[^&gt;]*$#([\w\-]*)$,并且都在一个非捕获组中。

      /^(?:EXP)$)/ # EXP => A|B
      
      /^(?:A|B)$)/ # A => [^#<]*(<[\w\W]+>)[^>]*$, B => #([\w\-]*)$
      
      /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/
      

      【讨论】:

      • 为什么在这个正则表达式中需要非捕获组?
      猜你喜欢
      • 2014-12-06
      • 2012-06-10
      • 1970-01-01
      • 1970-01-01
      • 2014-09-02
      • 2016-06-10
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多