Ответ 1
Это [^#<]*(<[\w\W]+>)[^>]*$
и #([\w\-]*)$
Это регулярное выражение происходит от JQuery, а "|" означает "или", но какие две части включены для выбора?
/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/
it [^>]*$
| #([\w\-]*)$
или (<[\w\W]+>)[^>]*$
| #([\w\-]*)$)
или что-нибудь еще?
Это [^#<]*(<[\w\W]+>)[^>]*$
и #([\w\-]*)$
Он [^#<]*(<[\w\W]+>)[^>]*$
или #([\w\-]*)$
, и оба в группе, не участвующей в записи.
/^(?:EXP)$)/ # EXP => A|B
/^(?:A|B)$)/ # A => [^#<]*(<[\w\W]+>)[^>]*$, B => #([\w\-]*)$
/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/
Просто: x|y
Соответствует либо x
, либо y
.
Например: /green|red/
соответствует green
в green apple
и red
в red apple.
Написание его многострочного с отступом помогает:
^
(?:
[^#<]*
(
<
[\w\W]+
>
)
[^>]*
$
|
#
(
[\w\-]*
)
$
)
Ваша вторая предпосылка правильная. |
имеет более низкий приоритет, чем конкатенация (т.е. Написание выражений друг за другом).