Регулярные выражения
Вопрос
Что нужно знать о регулярках, чтобы не выстрелить себе в ногу?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
флаг 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 ошибок.