我正在定義一個正則表達式對象,然後在循環中匹配它。它只是偶爾匹配,確切地說 - 每隔兩次。所以我創建了這個問題的最小工作示例。爲什麼Javascript正則表達式每次都匹配一次?
我在Opera和Firefox中試過這段代碼。兩者的行爲相同:
>>> domainRegex = /(?:\.|^)([a-z0-9\-]+\.[a-z0-9\-]+)$/g;
/(?:\.|^)([a-z0-9\-]+\.[a-z0-9\-]+)$/g
>>> domainRegex.exec('mail-we0-f174.google.com');
Array [".google.com", "google.com"]
>>> domainRegex.exec('mail-we0-f174.google.com');
null
>>> domainRegex.exec('mail-we0-f174.google.com');
Array [".google.com", "google.com"]
>>> domainRegex.exec('mail-we0-f174.google.com');
null
>>> domainRegex.exec('mail-we0-f174.google.com');
Array [".google.com", "google.com"]
>>> domainRegex.exec('mail-we0-f174.google.com');
null
爲什麼會發生這種情況?此行爲是否記錄在案?除了在循環體內定義正則表達式之外,有沒有辦法解決這個問題?
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec# Finding_successive_matches – Passerby
[爲什麼使用Javascript中的全局標誌的RegExp會給出錯誤的結果?](http://stackoverflow.com/questions/1520800/why-regexp-with-global-flag-in-javascript-give-wrong-results ) – Bergi
@GDR這是因爲[RegExp.lastIndex]發生的(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/lastIndex?redirectlocale=en-US&redirectslug=JavaScript %2FReference%2FGlobal_Objects%2FRegExp%2FlastIndex)(_ read「description」section_)。 –