Internet Explorer increments the lastIndex of a regexp with /g after matching a 
zero-length string using exec or test. This helps avoid infinite loops and 
therefore brings regular expression usage in line with other programming 
languages and regex libraries, as well as developer expectations (there is some 
evidence of this at https://bugzilla.mozilla.org/show_bug.cgi?id=252356 ). IE's 
behavior also seems in line with ES3 15.10.7.5, which states that "The value of 
the lastIndex property is an integer that specifies the string position at 
which to start the next match."

Granted, the property is named lastIndex, and not nextStartIndex or some such. 
But then section 15.10.7.5 does not agree with the name of the property. Is 
lastIndex the end of the last match, or the beginning of the wrong place to 
start the next match?

Here is an example of when one must go out of their way to avoid an infinite 
loop that would result from the ES3 standard behavior:

var regex = /^/gm, str = "test", match;
while (match = regex.exec(str)) {
    ...
    if (regex.lastIndex == match.index) regex.lastIndex++;
}

Or, if one wishes their code to access a lastIndex value as described in ES3 
cross-browser:

var regex = /^/gm, str = "test", match;
while (match = regex.exec(str)) {
    if (!match[0].length && regex.lastIndex > match.index) regex.lastIndex--;
    ...
    if (regex.lastIndex == match.index) regex.lastIndex++;
}

Changing the handling of lastIndex to match IE (incrementing after zero-length 
matches) might break some programs. IMO, it would equally likely fix some 
programs that are currently susceptible to infinite loops or other unexpected 
behavior.

--Steven Levithan



_________________________________________________________________
It’s a talkathon – but it’s not just talk.
http://www.imtalkathon.com/?source=EML_WLH_Talkathon_JustTalk
_______________________________________________
Es4-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es4-discuss

Reply via email to