@NeuromatiK

Странное поведение RegExp.test()?

Здравствуйте.
Столкнулся со странным поведением функции test.
В общем такой код
var q = new RegExp('вы', 'ig');
var tester ='Выбрать дни';
//var tester ='Выбрать недели';
//var tester ='Выбрать месяцы';
console.log(search + '+' + tester + ' = ' + q.test(tester));
console.dir(q);
console.log(search + '+' + tester + ' = ' + q.test(tester));
console.dir(q);
console.log(search + '+' + tester + ' = ' + q.test(tester));
console.dir(q);
if (q.test(tester) === true) {
	item.removeClass('hidden-result');
} else {
	item.addClass('hidden-result');
}


Первые строки и показывают в консоли странные результаты
выб+Выбрать дни = true
/выб/gi
выб+Выбрать дни = false
/выб/gi
выб+Выбрать дни = true
/выб/gi
выб+Выбрать недели =false
/выб/gi
выб+Выбрать недели =  true
/выб/gi
выб+Выбрать недели = false
/выб/gi
выб+Выбрать месяцы = true
/выб/gi
выб+Выбрать месяцы = false
/выб/gi
выб+Выбрать месяцы = true
/выб/gi


В результате, у меня прячется элемент с текстом "Выбрать недели"(результат test возвращает false!), хотя элементы с текстом "Выбрать дни" и "Выбрать месяцы" отрабатывают и показываются. И так же не совсем понятно, почему каждый раз результаты разные.

Тестировал в Хроме и Firefox.
  • Вопрос задан
  • 2236 просмотров
Решения вопроса 1
@ldvldv
Если использовать модификатор g, то проверяются все вхождения образца в строку. Т.е. после первого вызова test свойство lastIndex будет равно 2, и следующий вызов будет искать начиная с 3 символа.
console.log(search + '+' + tester + ' = ' + q.test(tester) + ' ' + q.lastIndex);


stackoverflow.com/questions/1520800/why-regexp-wit...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы