regex.test () работает только через раз - PullRequest
30 голосов
/ 08 октября 2010

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.

1 Ответ

66 голосов
/ 08 октября 2010

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

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

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

...