Загрузка...
Загрузка...
20 практических regex-паттернов: email, телефон, URL, IP, дата, пароль, HTML, логи. Готовые решения для валидации и парсинга.
Бесплатные онлайн-инструменты по теме статьи
Полная шпаргалка по регулярным выражениям: метасимволы, квантификаторы, группы, lookahead/lookbehind, флаги. Справочник с примерами для разработчиков.
Веб-разработкаПодробное руководство по регулярным выражениям. Синтаксис, метасимволы, группы, lookahead, lookbehind. Практические примеры для JavaScript, Python, PHP.
РазработкаКак конвертировать CSV в JSON и обратно. Форматы данных, разделители, обработка кавычек, практические примеры на JavaScript и Python.
РазработкаРуководство по работе с JSON в REST API: парсинг ответов, валидация структуры, обработка ошибок и рекомендации для фронтенда и бэкенда.
Поделитесь с коллегами или изучите другие материалы блога
Регулярные выражения решают множество рутинных задач: валидация форм, извлечение данных из текста, очистка логов, парсинг конфигураций. В статье — 20 готовых паттернов с пояснениями и примерами использования. Тестировать и дорабатывать выражения можно в Regex Tester на reChecker. Для генерации по описанию используйте AI Regex Generator. Синтаксис и теория — в шпаргалке по regex и полном руководстве.
Базовый паттерн для большинства адресов:
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
Расширенный (RFC 5322 упрощённо):
^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$
Пример на JavaScript:
const emailRe = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
emailRe.test('user@example.com'); // true
emailRe.test('invalid'); // false
Российские номера в разных форматах:
^(\+7|8)[\s-]?\(?[489]\d{2}\)?[\s-]?\d{3}[\s-]?\d{2}[\s-]?\d{2}$
Разбор:
(\+7|8) — код страны +7 или 8[489] — код оператора (4xx, 8xx, 9xx)С захватом цифр для нормализации:
^(\+7|8)[\s\-()]*(\d{3})[\s\-()]*(\d{3})[\s\-]*(\d{2})[\s\-]*(\d{2})$
Замена: +7$2$3$4$5 → +79991234567
Базовый паттерн для HTTP/HTTPS URL:
^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)$
Упрощённый:
^https?:\/\/[^\s/$.?#].[^\s]*$
Извлечение URL из текста:
https?:\/\/[^\s<>"{}|\\^`\[\]]+
Точная проверка (0–255 в каждом октете):
^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)$
Упрощённый (допускает 000–999):
^(?:\d{1,3}\.){3}\d{1,3}$
Базовый паттерн для IPv6:
^(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$
С учётом сжатия нулей (::):
^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:)*:([0-9a-fA-F]{1,4}:)*[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:)$
^(0[1-9]|[12]\d|3[01])\.(0[1-9]|1[0-2])\.(19|20)\d{2}$
С захватом групп для проверки:
const dateRe = /^(0[1-9]|[12]\d|3[01])\.(0[1-9]|1[0-2])\.(19|20)\d{2}$/;
const m = '31.12.2025'.match(dateRe);
// m[1]=день, m[2]=месяц, m[3]=год
^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})?)?$
Упрощённый (только дата):
^\d{4}-\d{2}-\d{2}$
Минимум 8 символов, буквы, цифры, спецсимволы:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*(),.?":{}|<>]).{8,}$
Варианты требований:
^.{8,}$^(?=.*[A-Za-z])(?=.*\d).{8,}$^[A-Za-z0-9]{8,}$Латинские буквы, цифры, дефисы:
^[a-z0-9]+(?:-[a-z0-9]+)*$
Проверка существующего slug. Для генерации из строки — транслитерация и замена пробелов на дефисы.
Содержимое между парными тегами:
<(\w+)[^>]*>(.*?)</\1>
Группа 1 — имя тега, группа 2 — содержимое. Использовать с флагом s если содержимое многострочное.
Извлечение атрибутов:
(\w+)=["']([^"']*)["']
Стандартный combined log format:
^(\S+)\s(\S+)\s(\S+)\s\[([^\]]+)\]\s"([^"]*)"\s(\d+)\s(\d+)\s"([^"]*)"\s"([^"]*)"$
Группы: IP, идентификатор, пользователь, дата, запрос, статус, размер, referer, user-agent.
Упрощённый (IP, дата, метод, URL, статус):
^(\d+\.\d+\.\d+\.\d+).*\[([^\]]+)\].*"(\w+)\s([^\s]+).*"\s(\d+)
Целые числа:
-?\d+
Десятичные:
-?\d+(?:\.\d+)?
С разделителями тысяч (1 000 000):
-?(?:\d{1,3}(?:\s\d{3})*|\d+)(?:,\d+)?
<[^>]+>
Замена на пустую строку очищает теги. Не подходит для вложенных структур — используйте парсер HTML.
\b(\w+)\s+\1\b
Находит «the the», «is is» и т.п. С флагом i — без учёта регистра.
Простое извлечение значения по ключу:
"name"\s*:\s*"([^"]*)"
Для вложенных структур и экранированных кавычек нужен JSON-парсер.
^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$
Поддержка 3- и 6-значных форматов. С альфа-каналом:
^#([a-fA-F0-9]{8}|[a-fA-F0-9]{6}|[a-fA-F0-9]{3})$
Для строк без кавычек и запятых внутри:
,(?=(?:[^"]*"[^"]*")*[^"]*$)
Разделитель — запятая вне кавычек. Для полноценного CSV лучше использовать специализированные парсеры.
["']([^"']*)["']
Или с поддержкой экранирования:
"([^"\\]*(?:\\.[^"\\]*)*)"
Множественные пробелы в один:
\s+
Замена на один пробел. Удаление пробелов в начале и конце — ^\s+|\s+$ или trim() в коде.
^https?:\/\/(?:www\.)?([^\/\s]+)
Группа 1 — домен. Для извлечения из текста:
https?:\/\/(?:www\.)?([^\/\s]+)
| Задача | Паттерн |
|---|---|
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ | |
| Телефон РФ | ^(\+7|8)[\s-]?\(?[489]\d{2}\)?[\s-]?\d{3}[\s-]?\d{2}[\s-]?\d{2}$ |
| URL | ^https?:\/\/[^\s/$.?#].[^\s]*$ |
| IPv4 | ^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)$ |
| Дата DD.MM.YYYY | ^(0[1-9]|[12]\d|3[01])\.(0[1-9]|1[0-2])\.(19|20)\d{2}$ |
| Пароль 8+ | ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$ |
| Slug | ^[a-z0-9]+(?:-[a-z0-9]+)*$ |
| Hex-цвет | ^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$ |
| HTML-теги | <[^>]+> |
| Дубли слов | \b(\w+)\s+\1\b |
При копировании паттернов замените | на | (вертикальная черта для альтернации в regex).
\d+(?:\s?\d{3})*(?:[.,]\d{2})?\s?(?:руб|₽|RUB)
Находит «1 500 руб», «10.99 ₽», «1 000 000 RUB».
Только буквы, цифры, дефис, подчёркивание, точка:
^[\w\-\.]+$
@([a-zA-Z0-9_]{1,15})
Группа 1 — имя пользователя (до 15 символов, как в Twitter).
#([a-zA-Zа-яА-ЯёЁ0-9_]+)
Удалить пустые строки, оставить по одной:
\n{3,}
Замена на \n\n. Или сжать все пробельные последовательности в один пробел:
[ \t]+
Для коротких строк, с игнором регистра и пробелов:
^(\w)\w*\1$|^(\w)(\w)\w*\3\2$|^(\w)(\w)(\w)\w*\5\4\3$
Универсальный палиндром через regex практически нереализуем — используйте цикл в коде.
^([01]?\d|2[0-3]):([0-5]\d)$
Группы: часы и минуты. Поддержка 24-часового формата.
v?(\d+(?:\.\d+){0,2})
Находит «1.2.3», «v2.0», «10».
Показать только последние 4 цифры:
'4111111111111111'.replace(/\d(?=\d{4})/g, '*');
// '************1111'
([a-z])([A-Z])
Замена на $1 $2 — «camelCase» → «camel Case».
^ и $. Для поиска в тексте — без них.x (где есть) и комментарии.Синтаксис и все конструкции — в шпаргалке по regex. Подробная теория — в полном руководстве. Инструменты: Regex Tester и AI Regex Generator.