Подтвердить что ты не робот

Regex.test() работает только в другое время

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

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

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

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

4b9b3361

Ответ 1

Это ошибка в движке RegEx, здесь возник подобный вопрос с той же проблемой.

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

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