Строки и регулярные выражения
↑ 1.4 JavaScript: основы · ← Предыдущая · → Следующая
Зачем это на собесе
Валидация, парсинг и подстановки — нужны регулярки на базовом уровне и знание их подводных камней.
Объяснение
Строки неизменяемы. Основные методы: slice, substring, split, join, trim, padStart, replace/replaceAll, includes, startsWith, endsWith, at, localeCompare, normalize, шаблонные литералы `${x}`.
Регулярные выражения:
| Элемент | Смысл |
|---|---|
\d \w \s | цифра, буква/цифра/_, пробел |
. ^ $ | любой символ, начало, конец |
* + ? {n,m} | квантификаторы (жадные; *? — ленивые) |
[abc] [^abc] | набор / отрицание |
(…) (?:…) (?<name>…) | группа, без захвата, именованная |
| | или |
(?=…) (?!…) (?<=…) | lookahead/lookbehind |
Флаги: g (все совпадения), i (регистр), m, s, u (Unicode), y (sticky), d (индексы).
const re = /^(?<user>[\w.+-]+)@(?<domain>[\w-]+\.[\w.]+)$/;
"a@b.ru".match(re)?.groups.domain; // "b.ru"
"a1b22".replace(/\d+/g, (m) => `[${m}]`); // "a[1]b[22]"
[..."2025-06-12".matchAll(/(\d+)/g)].map(m => m[1]);
/\d{3}-\d{2}/.test("123-45");
"a,b;c".split(/[,;]/);Разница: test → boolean, match → результаты, matchAll → итератор, exec → пошаговый поиск (осторожно с lastIndex при g).
Нюансы и подводные камни
- Флаг
gиtest/execхранят состояниеlastIndex: повторные вызовы дают чередующиеся результаты. - Катастрофический бэктрекинг (ReDoS): вложенные квантификаторы
(a+)+на длинных входах подвешивают вкладку/сервер. - Email по регулярке полностью не проверить — базовая проверка и подтверждение письмом.
\wне поддерживает кириллицу: используйте\p{L}с флагомu.- Экранирование пользовательского ввода перед вставкой в регулярку.
Практика
- Напишите регулярку для телефона и даты с именованными группами.
- Преобразуйте
camelCaseвsnake_caseчерезreplace. - Найдите пример катастрофического бэктрекинга и исправьте.
Вопросы с ответами
Чем жадные квантификаторы отличаются от ленивых?
Жадные берут максимум возможного, ленивые (
*?) — минимум.
Что такое ReDoS?
Атака входом, вызывающим экспоненциальное время работы регулярки из-за бэктрекинга.