Строки и регулярные выражения

↑ 1.4 JavaScript: основы · ← Предыдущая · → Следующая

Желательно~3 мин чтенияУровень: junior

Зачем это на собесе

Валидация, парсинг и подстановки — нужны регулярки на базовом уровне и знание их подводных камней.

Объяснение

Строки неизменяемы. Основные методы: 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.
  • Экранирование пользовательского ввода перед вставкой в регулярку.

Практика

  1. Напишите регулярку для телефона и даты с именованными группами.
  2. Преобразуйте camelCase в snake_case через replace.
  3. Найдите пример катастрофического бэктрекинга и исправьте.

Вопросы с ответами

Связанные темы