I have a weird issue working with the Javascript Regexp.exec function. When calling multiple time the function on new (I guess ...) regexp objects, it works one time every two. I don't get why at all!
Here is a little loop example but it does the same thing when used one time in a function and called multiple times.
for (var i = 0; i < 5; ++i) { console.log(i, (/(b)/g).exec('abc')); } > 0 ["b", "b"] > 1 null > 2 ["b", "b"] > 3 null > 4 ["b", "b"]
When removing the /g, it gets back to normal.
for (var i = 0; i < 5; ++i) { console.log(i, (/(b)/).exec('abc')); } /* no g ^ */ > 0 ["b", "b"] > 1 ["b", "b"] > 2 ["b", "b"] > 3 ["b", "b"] > 4 ["b", "b"]
I guess that there is an optimization, saving the regexp object, but it seems strange.
This behaviour is the same on Chrome 4 and Firefox 3.6, however it works as (I) expected in IE8. I believe that is intended but I can't find the logic in there, maybe you will be able to help me!
Thanks
If you're going to reuse the same regular expression anyway, take it out of the loop and explicitly reset it:
var pattern = /(b)/g; for (var i = 0; i < 5; ++i) { pattern.lastIndex = 0; console.log(i + ' ' + pattern.exec("abc")); }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With