Ответ вслух Middle Современный синтаксис обновлено

Регулярные выражения

Вопрос

Что нужно знать о регулярках, чтобы не выстрелить себе в ногу?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Главная ловушка - флаг g: регулярка становится объектом с состоянием lastIndex, и повторный test на той же строке вернёт false. Поэтому регулярки с g нельзя держать в константе и переиспользовать без сброса.

Что должно прозвучать в ответе

  • флаг g делает объект с состоянием lastIndex

  • test с флагом g при повторных вызовах даёт разный результат

  • жадные квантификаторы захватывают максимум, ленивые - минимум

  • группы захвата против незахватывающих (?:...)

  • катастрофический возврат: вложенные квантификаторы вешают поток

  • \w не включает кириллицу - нужны Unicode-классы с флагом u

Что могут спросить следом

  • Почему один и тот же test возвращает разное при повторе
  • Как вытащить все совпадения с группами
  • Чем опасна регулярка из пользовательского ввода

Разбор

Главная ловушка - флаг g: регулярка становится объектом с состоянием lastIndex, и повторный test на той же строке вернёт false. Поэтому регулярки с g нельзя держать в константе и переиспользовать без сброса.

Дальше: жадность (.* берёт максимум, .*? минимум), группы (...) против незахватывающих (?:...), именованные (?<name>...). Вложенные квантификаторы вида (a+)+ дают катастрофический возврат и вешают поток на специально подобранной строке.

И русская специфика: \w - это [A-Za-z0-9_], кириллицу он не ловит. Нужен явный диапазон или \p{L} с флагом u.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

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