Search code examples
javascriptregexfirefoxgoogle-chromesafari

regex.test() only works every other time


Regex test() is giving me issues in Firefox and Chrome, yet it works flawlessly in Opera and Safari.

troubled code:

var pattern = /(\s+(?!\$\w+)|(^(?!\$\w+)))/g;
if(pattern.test(String(id).replace(/\s+OR|AND\s+/g, ''))) {
 searchError("You suck.");
 return 1;
}

When you pass in white space, it blocks it every time. When you pass in something like '$a b' then it will work every other time in Firefox/Chrome. WEIRD.


Solution

  • It's a bug in the RegEx engine, a similar question with the same issue came up here.

    From my answer to that question: It's a bug with the way regexes are implemented in ECMAScript 3, there's a great post on the details here.

    The basics are a /regex/ with the g modifier doesn't reset correctly, so multiple .test() calls alternate between true and false if everyone should be true, every other calls successfully resets it.