我做了一個簡單的代碼在一個字符串捕獲特定組:Javascript中的正則表達式不像應該那樣貪婪?
/[a-z]+([0-9]+)[a-z]+/gi (n chars , m digts , k chars).
code:
var myString='aaa111bbb222ccc333ddd';
var myRegexp=/[a-z]+([0-9]+)[a-z]+/gi;
var match=myRegexp.exec(myString);
console.log(match)
while (match != null)
{
match = myRegexp.exec(myString);
console.log(match)
}
結果是:
["aaa111bbb", "111"]
["ccc333ddd", "333"]
null
但是且慢, 爲什麼他沒有嘗試bbb222ccc
部分?
我的意思是, 它看到了aaa111bbb
但他應該有嘗試bbb222ccc
...(這是貪婪!)
我缺少什麼?
此外
看着
while (match != null)
{
match = myRegexp.exec(myString);
console.log(match)
}
它是怎麼發展到第二個結果? 起初有:
var match = myRegexp.exec(myString);
更高版本(在while循環)
match=myRegexp.exec(myString);
match=myRegexp.exec(myString);
它是相同線......在那裏它記住第一結果已經顯示?
因爲第一場比賽後,該指數是在BBB已經通過了第一場比賽的結束,並沒有什麼留下以匹配「ccc333ddd」'的字符串的其餘部分。貪婪意味着'+'會嘗試儘可能匹配,而不考慮正則表達式的下一部分可以匹配它。 – Esailija
嗨@Esailija是的,我已經明白了。但如果它像它說的那樣貪婪,那不是。 –
@Esailija請貼上您的評論作爲答案。 –