Что делает '|' означает в этом регулярном выражении?

Это регулярное выражение происходит от JQuery, а "|" означает "или", но какие две части включены для выбора?

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

it [^>]*$ | #([\w\-]*)$ или (<[\w\W]+>)[^>]*$ | #([\w\-]*)$) или что-нибудь еще?

Ответ 2

Он [^#<]*(<[\w\W]+>)[^>]*$ или #([\w\-]*)$, и оба в группе, не участвующей в записи.

/^(?:EXP)$)/ # EXP => A|B

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

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

Ответ 4

Написание его многострочного с отступом помогает:

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

Ваша вторая предпосылка правильная. | имеет более низкий приоритет, чем конкатенация (т.е. Написание выражений друг за другом).