Что означают слова ++ и * + в регулярном выражении?
Я переношу некоторую библиотеку с PHP на JavaScript, и я наткнулся на это регулярное выражение, некоторые его части неясно мне.
#(?: *+(?<= |^)\.((?:\([^)\n]++\)|\[[^\]\n]++\]|\{[^}\n]++\}|<>|>|=|<){1,4}?))#
Нечеткие части
Я знаю, что это выражение должно принимать строки типа
.(title)[class]{style}<>
.[class]{style}<>
.[class](title){style}
// and so one - no metter of order \(.+\), \[.+\] and \{.+\} parts
// and optional <>, >, = or < at the end
Спасибо за объяснение.
EDIT: это выражение используется с модификатором PCRE_UNGREEDY
Ответы
Ответ 1
++
Из Что такое двойной плюс в регулярных выражениях?
Это Possessive Quantifier.
В основном это означает, что если механизм регулярных выражений не подходит позже, он не вернется и попытается отменить совпадения, которые он сделал здесь. В большинстве случаев он позволяет двигателю работать намного быстрее и может дать вам некоторый контроль там, где он вам нужен - что очень редко для большинства используется.
*+
*+
является притяжательным квантором для квантора *
.
Ответ 2
A плюс после квантификатора (?, * или +) является притяжательным квантификатором.
Может ли кто-нибудь объяснить Possessive Quantifier мне? (Регулярные выражения)