Что означают слова ++ и * + в регулярном выражении?

Я переношу некоторую библиотеку с 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.

В основном это означает, что если механизм регулярных выражений не подходит позже, он не вернется и попытается отменить совпадения, которые он сделал здесь. В большинстве случаев он позволяет двигателю работать намного быстрее и может дать вам некоторый контроль там, где он вам нужен - что очень редко для большинства используется.

*+

*+ является притяжательным квантором для квантора *.