++和*+是什么意思?

24

我正在将一些 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修饰符一起使用的。


3
很不幸,JavaScript 不支持 possessive quantifiers(这是您在此处看到的结构)和 atomic groups(它们是实现同样结果的另一种选择)。此外,它也不支持 lookbehind assertions(这个正则表达式也在使用)。简而言之,您无法直接将此正则表达式翻译成 JavaScript。 - Tim Pietzcker
@TimPietzcker 这很遗憾,但说实话,我已经预料到了。要想转化它,我首先需要理解它。 - Jakub Truneček
1个回答

28

++

来自正则表达式中的双加号是什么?

那是一个占有量词

它的作用是,如果正则表达式引擎在后面的匹配失败时,它不会回头尝试撤销此处的匹配。在大多数情况下,它可以让引擎更快地失败, 并且可以在需要时给您一些控制 - 这对于大多数用途来说非常罕见。

*+

*+* 量词的占有量词。


2
此答案已添加到 Stack Overflow 正则表达式 FAQ 中的“量词”部分。 - aliteralmind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接