“* +”和“*”的占有和贪婪量词给出不同结果的情况?

时间:2017-08-03 14:44:37

标签: regex

我正在看这个问题Greedy vs. Reluctant vs. Possessive Quantifiers

我可以看到*+*如何匹配零次或多次,但占有量词*+将尽可能地向前匹配..而*将做.*并回溯。我可以接受*+字符串很长时.*会更有效率。

我很感兴趣,但是当他们给出不同的结果时。

我看到了评论

  

@moodboom,有零病例(数学事实)在哪里   占有量词将产生一个不会产生的匹配   通过简单的贪婪量词。偶尔会出现这种情况   当贪婪量词产生匹配时,将产生不匹配。   对于所有其他情况(贪婪和占有欲产生相同的情况)   结果),占有量词给出了性能提升。 - 通配符   5月5日23:00

我非常有兴趣看到这种情况得到了扩展,特定情况下占有欲和贪婪量词会产生不同的结果。

对比*+*

我也会对不同结果的情况感兴趣,对比?+?

2 个答案:

答案 0 :(得分:2)

我找到了一个案例,但我不确定解释和针对性。而且我认为还有很多其他案例。

测试用例

.*+

经过测试:

  

foob

只有贪婪匹配它。

解释

占有将首先匹配整个字符串b),然后尝试匹配$字符,但只查找字符串的结尾(b)。< / p>

Greedy也会匹配整个字符串,但后来向后看,直到找到第一个function getFromSomewhere(arg1) { var newName = arg1 + "sampleWord"; window[newName] = []; } getFromSomewhere("blip"); console.log(blipsampleWord); // You'd get [] 字符。它会找到它。

答案 1 :(得分:0)

查看演示中的示例,了解测试字符串aaabaaax尝试贪婪模式a*[^b]和占有模式a*+[^b]

Demo 1

Demo 2

a*[^b]会回溯以尝试找到匹配项,因此它会在aaa中找到aaab

a*+[^b]会发现aaa不会回溯,会尝试匹配[^b]aaab

失败