++和*+在正则表达式中的含义是什么?

Jak*_*ček 12 php regex

我正在将一些库从PHP移植到JavaScript,我遇到了这个正则表达式,其中一些部分对我来说不清楚.

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

不清楚的部分是

  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
Run Code Online (Sandbox Code Playgroud)

谢谢你的解释.

编辑:此表达式与PCRE_UNGREEDY修饰符一起使用

Wou*_*r J 21

++

来自正则表达式中的双倍加号?

这是一个占有量词.

它基本上意味着如果正则表达式引擎稍后失败匹配,它将不会返回并尝试撤消它在此处所做的匹配.在大多数情况下,它允许引擎更快发生故障,并且可以在您需要的地方为您提供一些控制 - 这在大多数情况下非常罕见.

*+

*+是量词的占有*量词.

  • 此答案已添加到[堆栈溢出正则表达式常见问题](http://stackoverflow.com/a/22944075/2736496),在“量词”下 (2认同)