В чем проблема с этим регулярным выражением при использовании глобального флага и флага, нечувствительного к регистру? Запрос - это пользовательский ввод. Результат должен быть [true, true].Почему RegExp с глобальным флагом дает неправильные результаты?
var query = 'Foo B';
var re = new RegExp(query, 'gi');
var result = [];
result.push(re.test('Foo Bar'));
result.push(re.test('Foo Bar'));
// result will be [true, false]
var reg = /^a$/g;
for(i = 0; i++ < 10;)
console.log(reg.test("a"));
Добро пожаловать в один из многих ловушек RegExp в JavaScript. Он имеет один из худших интерфейсов для обработки регулярных выражений, которые я когда-либо встречал, полный странных побочных эффектов и неясных оговорок. Большинство общих задач, которые вы обычно хотите делать с регулярным выражением, трудно правильно записать. – bobince
XRegExp выглядит как хорошая альтернатива. http://xregexp.com/ – about
См. также здесь: http://stackoverflow.com/questions/604860/interesting-test-of-javascript-regexp – Prestaul