Что выведет код 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 ошибок.

Термины по теме