Что выведет код Senior Современный синтаксис обновлено
Глобальная регулярка хранит состояние
Вопрос
Что выведет код? По строке на каждый вывод.
const re = /a/g;
console.log(re.test('abc'));
console.log(re.test('abc'));
console.log(re.lastIndex);
const re2 = /a/;
console.log(re2.test('abc'), re2.test('abc'));
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: true, false, 0, true true. Почему так У глобальной регулярки test и exec продолжают поиск с lastIndex, поэтому повторный вызов на той же строке даёт false.
Что выведет
true
false
0
true true
Разбор
Почему так
У глобальной регулярки test и exec продолжают поиск с lastIndex, поэтому повторный вызов на той же строке даёт false. Это ломает переиспользование регулярок в модулях. Лечится сбросом lastIndex или отказом от флага g там, где он не нужен.
Вывод
true
false
0
true true
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.