регулярное выражение.test () работает только каждый раз

Regex test() дает мне проблемы в Firefox и Chrome, но он работает безупречно в Opera и Safari.

проблемный код:

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

когда вы проходите в белом пространстве, он блокирует его каждый раз. Когда вы проходите в чем-то вроде '$a b' тогда он будет работать каждый раз в Firefox / Chrome. СТРАННЫЙ.

1 ответов


это ошибка в движке RegEx,аналогичный вопрос с той же проблемой пришел сюда.

из моего ответа на этот вопрос: это ошибка с тем, как regexes реализованы в ECMAScript 3,есть отличный пост о деталях здесь.

основы являются /regex/ с g модификатор не сбрасывается правильно, поэтому несколько .test() вызовы чередуются между true и false если все должны быть true, каждый другой вызов успешно сбрасывает его.