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

Я портирую некоторую библиотеку из PHP в JavaScript, и я натолкнулся на это регулярное выражение, некоторые его части мне неясны.

#(?: *+(?<= |^)\.((?:\([^)\n]++\)|\[[^\]\n]++\]|\{[^}\n]++\}|<>|>|=|<){1,4}?))#

Непонятные части

  1. *+
  2. ++

Я знаю, что это выражение должно принимать такие строки, как

.(title)[class]{style}<>
.[class]{style}<>
.[class](title){style}
// and so one - no metter of order \(.+\), \[.+\] and \{.+\} parts 
// and optional <>, >, = or < at the end

Спасибо за объяснение.

РЕДАКТИРОВАТЬ: эта эспрессия используется с PCRE_UNGREEDY модификатор

2 ответа

Решение

++

Из чего стоит двойной плюс в регулярных выражениях?

Это притяжательный квантификатор.

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

*+

*+ является собственническим квантификатором для * квантор.

Плюс после квантификатора (?, * Или +) является собственническим квантификатором.

Может ли кто-нибудь объяснить мне "Притяжательные кванторы"? (Регулярные выражения)

Другие вопросы по тегам