爲什麼下面的正則表達式返回101
而不是1001
?+應該是貪婪的,爲什麼我會得到一個懶惰的結果?
console.log(new RegExp(/1(0+)1/).exec('101001')[0]);
我認爲+
是貪婪的,所以這兩個比賽的時間越長應返回。
IMO與Using javascript regexp to find the first AND longest match不同,因爲我不關心第一個,也就是最長的。有人能糾正我對貪婪的定義嗎?例如,上面的代碼片段與new RegExp(/<(.+)>/).exec('<b>a</b>')[0]
給出的b>a</b
的經典「oops,too greedy」示例有什麼區別?
(注:這似乎是語言無關(這也發生在Perl),但只是爲了便於在瀏覽器中運行它,我這裏使用的JavaScript。)
正則表達式是不提取最長匹配正確的工具。你可能會得到所有的子串,用'^ 10 + 1 $'模式進行測試,並使用特定於語言的方法得到最長的子串。 –
在匹配函數中使用'/ 1(0+)1 /'正則表達式,並通過對結果應用長度函數來找到最長匹配。 –
'+'是貪婪的,但它會首先比賽,中間的'1'被包含在第一場比賽中,所以它不會被包含在將來的比賽中,並且'1001'不會被匹配。 – muru