Definiuję obiekt regex, a następnie dopasowuję go do pętli. Dopasowuje się tylko czasami, a dokładnie - co drugi raz. Dlatego stworzyłem najmniejszą próbną próbkę tego problemu.Dlaczego regeks Javascript jest dopasowywany co drugi raz?
Próbowałem tego kodu w Opera i Firefox. Zachowanie jest takie samo w obu przypadkach:
>>> 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
Dlaczego tak się dzieje? Czy to zachowanie jest udokumentowane? Czy istnieje sposób na obejście, poza definiowaniem korpusu pętli wewnętrznej regex?
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec# Finding_successive_matches – Passerby
możliwy duplikat [Dlaczego RegExp z globalną flagą w JavaScript daje złe wyniki?] (Http://stackoverflow.com/questions/1520800/why-regexp-with-global-flag-in-javascript-give-wrong-results) – Bergi
@GDR dzieje się tak z powodu [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) (_ przeczytaj "opis" section_). –