Тестер регулярных выражений бесплатно: проверяйте regex на своём тексте с подсветкой совпадений, группами и предпросмотром замены. Флаги, кириллица против w и честное сравнение с regex101, MainSpy, Coddy и BI Data.
Регулярное выражение — это шаблон для поиска текста: несколько символов описывают тысячи вариантов. Проверить такой шаблон без тестера — всё равно что писать код без запуска: вроде правильно, а работает ли — неизвестно. Бесплатный тестер регулярных выражений на ToolVena проверяет шаблон прямо в браузере, на движке JavaScript RegExp: вставляете шаблон, вставляете текст — и сразу видите подсветку совпадений, их позиции, группы захвата и предпросмотр замены. Ничего никуда не загружается, регистрации нет. Этот гид честно объясняет, как пользоваться тестером, что значат флаги, как читать ошибки простым языком и чем инструмент отличается от regex101, Coddy, BI Data и MainSpy.
Шаг первый: впишите шаблон в поле паттерна. По умолчанию там стоит шаблон электронной почты — замените его своим. Шаг второй: вставьте текст для проверки в поле ниже. Шаг третий: смотрите на подсветку — совпадения выделяются прямо в тексте, а рядом появляется список совпадений с позициями и группами. Пример из живого теста: шаблон «\d+» против текста «Order 123, invoice 45, code 7» дал три совпадения: «123» на позициях 6–9, «45» на позициях 19–21 и «7» на позициях 28–29. Всё сошлось с ручной проверкой. Если шаблон неверный, тестер не молчит: например, шаблон «[» даёт заголовок «Этот шаблон не компилируется», сообщение движка «Invalid regular expression: /[/gi: Unterminated character class» и подсказку простым языком: класс символов, открытый через «[», никогда не был закрыт через «]», — посчитайте скобки в вашем шаблоне. Это и есть главное отличие от голого движка: ошибка объясняется, а не просто показывается.
У каждого флага — своё назначение, и у каждого на странице есть объяснение на русском. Флаг g (global) — искать все совпадения, а не только первое: без него тестер остановится на первом совпадении. Флаг i (case-insensitive) — не различать большие и маленькие буквы: шаблон «test» найдёт и «Test», и «TEST». Флаг m (multiline) — сделать так, чтобы «^» и «$» работали на каждой строке, а не только на начале и конце всего текста. Флаг s (dotall) — разрешить точке «.» совпадать и с переводом строки тоже: без него точка не пересекает границу строки. Флаг u (Unicode) — включить поддержку Юникода: без него некоторые конструкции с не-ASCII символами работают неправильно. Флаг y (sticky) — искать только с указанной позиции, а не где угодно в тексте: это продвинутый режим для разбора текста по частям. Начинающим хватает g и i; остальные нужны для многострочных текстов, русского текста с особенностями Юникода и для разбора по шагам.
Группы захвата — это скобки в шаблоне, которые запоминают часть совпадения. Например, шаблон «(\d+)-(\d+)» против «123-45» запомнит «123» как первую группу и «45» как вторую. В предпросмотре замены на них ссылаются как «$1» и «$2»: замена «[$1/$2]» даст «[123/45]». Именованные группы работают через «$<name>»: шаблон «(?<year>\d{4})» запоминает год под именем «year», а замена «год $<year>» вставит его. Специальные ссылки: «$&» — всё совпадение целиком, «$$» — знак доллара. Практический пример: нужно переставить дату «2026-11-06» в вид «06.11.2026» — шаблон «(\d{4})-(\d{2})-(\d{2})», замена «$3.$2.$1». Предпросмотр показывает результат сразу, без применения: видно, что получится, до того как менять текст. Это безопаснее, чем замена вслепую: ошибку в шаблоне замены видно до того, как она испортит текст.
В тестере есть библиотека из восьми готовых шаблонов: электронная почта, URL, дата в виде ГГГГ-ММ-ДД, IPv4-адрес, шестнадцатеричный цвет, время в 24-часовом формате, имя пользователя и URL-слаг. Они подписаны честно — как отправные точки для обучения, а не как гарантии. И правильно: универсального шаблона электронной почты не существует — настоящий стандарт описывает адреса сложнее, чем любой короткий шаблон, а строгий шаблон отвергнет редкие, но допустимые адреса. То же с телефоном: шаблон для российских номеров не подойдёт для казахстанских. Используйте готовые шаблоны как черновики: взяли, проверили на своих примерах, подправили под свою задачу. Если шаблон находит лишнее или пропускает нужное — это не поломка тестера, а сигнал, что шаблон нужно уточнить. Для проверки конкретных данных — ОГРН, СНИЛС, номера карты «Мир» — готовых шаблонов в тестере нет: их нужно составлять отдельно, и в этом гиде дальше рассказано, почему.
Тестер — это ещё и валидатор: он сразу говорит, компилируется шаблон или нет, и объясняет ошибку простым языком. Самые частые ошибки: незакрытая скобка «[» или «(», незакрытая фигурная скобка в квантификаторе «{2,», обратный слеш в конце шаблона. Подсказки на странице переводят сообщение движка на человеческий язык: что именно не закрыто и где искать. Отдельная опасность — катастрофический возврат (catastrophic backtracking): шаблон вида «(a+)+» против длинной строки из букв «a» может зависнуть — движок перебирает варианты экспоненциально долго. На странице есть предупреждение об этом, а также ограничение: совпадения останавливаются после 1000, шаблон — не длиннее 1000 символов, текст — не длиннее 20 000 символов. Эти лимиты защищают вкладку от зависания. Если тестер «задумался» — скорее всего, виноват шаблон с вложенными квантификаторами: упростите его, уберите «+» внутри «+», и проверка пойдёт мгновенно.
Главная ловушка для русского текста: символьный класс «\w» в JavaScript по умолчанию совпадает только с латинскими буквами, цифрами и подчёркиванием — кириллицу он не берёт. Шаблон «\w+» против слова «Привет» не найдёт ничего. Решений два: включить флаг u и использовать классы Юникода — например, «\p{L}+» для любых букв, — или явно указать диапазон кириллицы «[А-Яа-яЁё]+». Флаг u здесь важен: без него «\p{...}» вообще не работает. Вторая ловушка — регистр: без флага i шаблон «[а-я]+» не найдёт «Привет» с большой буквы. Третья — буква «ё»: она не входит в диапазон «а-я», поэтому шаблоны для русского текста должны включать её явно — «[А-Яа-яЁё]». Именно поэтому MainSpy, сильнейший русский конкурент, предупреждает о кириллице против «\w» в своём разделе «Что стоит знать»: это ошибка, на которой спотыкается почти каждый, кто впервые пишет шаблон для русского текста.
Обычный тестер на JavaScript не знает других диалектов — и это нормально, но стоит понимать границы. Для 1С нужен тестер с диалектом 1С: на первой странице поиска его нет — только общие JavaScript-тестеры, и Google прямо помечает «Не найдено: 1С» на их страницах. Для проверки ОГРН готового шаблона нет: на первой странице — только валидаторы контрольного числа, а не regex-инструменты. Для номера карты «Мир» готового инструмента нет: есть обсуждения на Хабре, документация тестовых карт и генераторы номеров — но не regex. Для номера телефона Казахстана — то же самое: ближайший ответ — статичный gist с шаблоном для России и СНГ, а не рабочий инструмент. Для Rust и .NET на русском — нет ни тестера с этими диалектами, ни русского интерфейса: regex101 поддерживает оба диалекта, но только на английском и на первой странице по этим запросам не показывается. Вывод простой: если ваш диалект — не JavaScript, этот тестер подойдёт для проверки логики шаблона, но финальную проверку делайте в тестере вашего диалекта. А если нужен шаблон для ОГРН, СНИЛС или карты «Мир» — составляйте его здесь, проверяя на своих примерах, а не ищите готовый: готовые шаблоны для таких данных либо неточны, либо устарели.
regex101 — самый известный тестер в мире: больше десяти диалектов (PCRE2, JavaScript, Python, Go, Java, .NET, Rust и другие), панель объяснений, замена, юнит-тесты, библиотека шаблонов, викторина и отладчик. Но объяснение, отладчик, конвертер, генератор кода и экспорт закрыты платной подпиской PRO, интерфейс только на английском, для сохранения нужен аккаунт, а новичкам он сложен. Coddy — первый результат почти по всем запросам: флаги, шпаргалка, четыре примера, позиции и группы, гид и FAQ, свежая страница (обновлено 25 апреля 2026 года), — но интерфейс только на английском, функции замены не видно, а страница ведёт на платную платформу обучения. BI Data — русскоязычный тестер: флаги, десять быстрых шаблонов (Email, IP, Телефон, URL, Год, Цвет HEX, Коды стран, Дата, Email простой, Цена в долларах), предзаполненный пример с тремя совпадениями, — но гид тонкий (короткое «Что это»), нет шпаргалки, не видно групп и замены, а сверху — реклама хостинга. MainSpy — сильнейший русский соперник: полностью русский интерфейс, объяснение выражения по токенам на русском, таблица совпадений с позициями и группами, замена, готовый код на JavaScript, Python, PHP и Go, предупреждения о катастрофическом возврате и о кириллице против «\w», — и при этом без видимого платного доступа, регистрации и рекламы. У ToolVena перед ним два преимущества: подсказки об ошибках простым языком и предпросмотр замены; у MainSpy перед ToolVena — экспорт кода и определение опасных шаблонов. Proglib — не инструмент, а список 2017 года: пять сервисов, девять лет давности, реклама и предложение войти для комментариев.
Как проверить регулярное выражение онлайн? Вставьте шаблон и текст в тестер — совпадения подсветятся сразу, а рядом появится список с позициями и группами. Как составить регулярное выражение онлайн? Начните с готового шаблона из библиотеки, проверьте его на своих примерах и подправьте под свою задачу — или опишите задачу словами и соберите шаблон по частям. Как расшифровать регулярное выражение онлайн? Вставьте его в тестер с объяснением по токенам — или читайте по частям: каждый символ и квантификатор по отдельности. Что такое флаг g? Глобальный поиск: искать все совпадения, а не только первое. Что такое флаг i? Поиск без учёта регистра. Почему шаблон «\w+» не находит русские слова? Потому что «\w» в JavaScript по умолчанию — только латиница, цифры и подчёркивание: используйте «[А-Яа-яЁё]+» или «\p{L}+» с флагом u. Что делать, если шаблон не компилируется? Прочитайте подсказку простым языком под ошибкой: чаще всего не закрыта скобка. Можно ли проверить шаблон для Python? Логику — да, но финальную проверку делайте в тестере Python: диалекты отличаются. Есть ли лимиты? Да: шаблон — до 1000 символов, текст — до 20 000 символов, совпадения — до 1000.
Если коротко: регулярные выражения проверяются только запуском — и тестер на ToolVena делает это в браузере, бесплатно, без регистрации и без загрузки. Вставьте шаблон, вставьте текст, посмотрите подсветку и группы, проверьте замену в предпросмотре — и только потом используйте шаблон в коде. Для JavaScript этого достаточно; для других диалектов — проверяйте логику здесь, а финал — в тестере своего диалекта. И помните про кириллицу: «\w» русские слова не находит, а «ё» не входит в «а-я».
Пример: вытащить все адреса электронной почты из текста.
Возьмём практическую задачу: в тексте — несколько адресов, и нужно их все вытащить. Шаблон из библиотеки — для электронной почты — даёт отправную точку, но проверьте его на своём тексте. Вставьте текст с адресами и без них: например, «Напишите нам на [email protected] или на [email protected], а также на личную почту [email protected]». С флагом g тестер найдёт все три адреса и покажет их позиции. Теперь проверьте отрицательные примеры: текст «напишите на example.com без собаки» не должен дать совпадений, а «info@example» без доменной зоны — тоже. Если шаблон находит «example.com» без «@», он слишком широкий; если пропускает «[email protected]» с точкой в имени — слишком узкий. Подправьте шаблон, пока он не найдёт ровно то, что нужно, и ничего лишнего. И помните: найденные адреса — это кандидаты, а не проверенные адреса: шаблон не проверяет, существует ли почтовый ящик, — он проверяет только форму записи.
Пример: проверить дату — и почему простого шаблона мало.
Шаблон даты «\d{4}-\d{2}-\d{2}» выглядит правильно: четыре цифры, дефис, две цифры, дефис, две цифры. Проверьте его на «2026-11-06» — совпадёт. Теперь проверьте на «2026-13-45»: месяц 13, день 45 — а шаблон всё равно совпадёт, потому что «\d{2}» — это любые две цифры, а не число от 01 до 12. Чтобы проверять по-настоящему, нужен строгий шаблон: месяц «(0[1-9]|1[0-2])», день «(0[1-9]|[12][0-9]|3[01])». Полный шаблон: «\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])». Но даже он пропустит «2026-02-31» — 31 февраля не существует, а шаблон этого не знает. Вывод: regex проверяет форму, а не смысл. Для настоящих дат после шаблона всегда проверяйте дату кодом — например, созданием объекта даты и сравнением. Шаблон — это первый фильтр, а не финальная проверка.
Жадные и ленивые квантификаторы: почему «.*» берёт слишком много.
Квантификатор «*» по умолчанию жадный: он берёт как можно больше. Пример: текст «<b>жирный</b> и <i>курсив</i>», шаблон «<.*>» найдёт «<b>жирный</b> и <i>курсив</i>» целиком — от первой открывающей скобки до последней закрывающей. А нужно было два отдельных совпадения. Решение — ленивый квантификатор: «<.*?>» берёт как можно меньше и найдёт «<b>» и «</b>» отдельно — а точнее, «<b>», «</b>», «<i>», «</i>» как четыре совпадения. Разница в одном знаке «?», а результат — противоположный. Правило простое: если шаблон с «.*» захватывает слишком много — добавьте «?» и сделайте его ленивым. Если наоборот, нужно захватить всё до конца — оставьте жадным. Проверяйте оба варианта в тестере на одном и том же тексте: разница видна сразу в подсветке.
Якоря «^» и «$»: начало и конец строки.
Якорь «^» означает начало строки, «$» — конец строки. Шаблон «^\d+$» найдёт только текст, целиком состоящий из цифр: «12345» — да, «123a» — нет, «a123» — нет. Без якорей шаблон «\d+» найдёт цифры внутри любого текста. С флагом m якоря работают на каждой строке многострочного текста: шаблон «^\d+» с флагом m найдёт числа в начале каждой строки, а без флага m — только в начале всего текста. Типичная ошибка — забыть флаг m при проверке многострочного текста: шаблон работает на первой строке и молчит на остальных. Вторая типичная ошибка — путать «$» с концом строки и концом текста: без флага m «$» — это конец всего текста (или перед финальным переводом строки), а с флагом m — конец каждой строки. Проверяйте якоря на многострочном тексте с флагом m и без него — разница видна в списке совпадений.
Просмотр вперёд и назад: lookahead и lookbehind.
Просмотр вперёд «(?=...)» проверяет, что после текущей позиции идёт нужный текст, — но не включает его в совпадение. Пример: шаблон «\d+(?= ₽)» найдёт число только если после него стоит « ₽», а само « ₽» в совпадение не войдёт. Так можно найти цены, не захватывая валюту. Просмотр назад «(?<=...)» — наоборот: проверяет текст до позиции. Шаблон «(?<=цена: )\d+» найдёт число только после «цена: ». Отрицательные варианты: «(?!...)» — «после не должно быть», «(?<!...)» — «до не должно быть». Например, «\d+(?! ₽)» найдёт числа, после которых нет « ₽». Важно: в JavaScript просмотр назад поддерживается с 2018 года — в старых движках он не работает, и если ваш код должен работать везде, проверяйте поддержку. В тестере на ToolVena движок современный, и lookbehind работает — но перед использованием в проде сверьтесь с целевым окружением.
Разбор готового шаблона по токенам: электронная почта.
Возьмём шаблон электронной почты из библиотеки и разберём его по частям — так учатся читать regex. Типичный шаблон выглядит как «^[\w.-]+@[\w-]+\.[a-z]{2,}$». Читаем слева направо: «^» — начало строки; «[\w.-]+» — один или больше символов из букв, цифр, подчёркивания, точки и дефиса (это имя ящика); «@» — буквально знак «собака»; «[\w-]+» — доменное имя; «\.», — точка (экранированная, потому что без слеша точка означает «любой символ»); «[a-z]{2,}» — от двух букв (доменная зона); «$» — конец строки. Теперь видно и слабости: шаблон не принимает адреса с плюсом («[email protected]»), не принимает кириллические домены, а «[a-z]» без флага i не принимает заглавные буквы в зоне. Разбор по токенам — лучший способ понять, почему шаблон ведёт себя так, а не иначе: каждый токен проверяйте отдельно на своих примерах.
Методика проверки: положительные и отрицательные примеры.
Хорошая проверка шаблона — это не один пример, а набор. Положительные примеры — тексты, которые шаблон должен найти: для дат — «2026-11-06», «2000-01-01», «1999-12-31». Отрицательные примеры — тексты, которые шаблон найти не должен: «2026-13-45», «06.11.2026» (другой формат), «2026/11/06» (другой разделитель), «ноябрь 2026» (слова вместо цифр). Граничные случаи — пустая строка, одна цифра, очень длинная строка, текст с переводом строки, текст с «ё» и заглавными буквами. Проверяйте каждую группу по отдельности: сначала сам шаблон без флагов, потом с флагом i, потом с флагом m на многострочном тексте. Если шаблон проходит все положительные и не проходит ни одного отрицательного — он готов. Если хотя бы один пример ведёт себя не так — уточняйте шаблон, а не надейтесь, что «в проде такого не будет»: в проде будет именно такой пример.
Когда regex не нужен: HTML, JSON и другие случаи.
Регулярные выражения — не универсальный инструмент. Не разбирайте HTML регулярками: HTML — вложенная структура, а regex — плоский шаблон, и любой шаблон для тегов сломается на вложенных тегах, комментариях или кавычках внутри атрибутов. Для HTML используйте парсер. Не проверяйте JSON регулярками: для этого есть JSON.parse — он и проверит, и разберёт. Не пишите сложные шаблоны для того, что решается строковыми функциями: проверить, начинается ли строка с «http», проще через startsWith, чем через «^https?://». Правило простое: если задачу можно решить без regex — решайте без regex; если без regex никак — пишите самый простой шаблон, который решает задачу, и проверяйте его в тестере. Сложный шаблон, который никто не может прочитать, — это долг, который заплатит тот, кто будет его поддерживать.
Библиотека из восьми шаблонов: что где использовать.
Восемь готовых шаблонов в тестере покрывают самые частые задачи. Электронная почта — для форм и проверки ввода. URL — для ссылок: проверяет, похож ли текст на адрес сайта. Дата в виде ГГГГ-ММ-ДД — для дат в документах и логах. IPv4-адрес — для логов серверов и сетевых настроек: четыре числа от 0 до 255 через точки. Шестнадцатеричный цвет — для CSS: решётка и шесть шестнадцатеричных цифр. Время в 24-часовом формате — для расписаний: часы от 00 до 23, минуты от 00 до 59. Имя пользователя — для логинов: буквы, цифры и подчёркивание. URL-слаг — для адресов страниц: строчные буквы, цифры и дефисы. Каждый из них — отправная точка: взяли, проверили на своих примерах, подправили. Например, шаблон времени «([01]\d|2[0-3]):[0-5]\d» не примет «25:99» — и это правильно; а шаблон IPv4 «\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}» примет «999.999.999.999» — и это уже нужно проверять отдельно.
JavaScript, Python и PCRE: чем отличаются диалекты.
Регулярные выражения — не один язык, а семья диалектов, и один и тот же шаблон в разных движках ведёт себя по-разному. В JavaScript именованные группы пишутся как «(?<name>...)», а в Python — как «(?P<name>...)». Просмотр назад в JavaScript появился только в 2018 году, а в Python и PCRE он был давно. Класс «\d» в JavaScript с флагом u — только ASCII-цифры, а в некоторых движках — и другие цифры Юникода. В PCRE есть рекурсия и условные конструкции, которых нет в JavaScript. Поэтому шаблон, проверенный в тестере на JavaScript, переносите в Python или PHP только после проверки в тестере этого диалекта: логика совпадёт в девяти случаях из десяти, а десятый — это как раз именованные группы или просмотр назад. Если пишете код на нескольких языках, держите для каждого свой набор проверенных шаблонов — и не копируйте шаблоны между языками вслепую.
Запомните три вещи. Первая: всегда проверяйте шаблон на своих примерах — и на тех, которые должны найтись, и на тех, которые не должны. Вторая: если тестер завис — упрощайте шаблон, убирайте вложенные квантификаторы вроде «(a+)+». Третья: готовые шаблоны — это черновики, а не гарантии: для ОГРН, СНИЛС, карты «Мир» и телефонов Казахстана составляйте шаблон сами и проверяйте на реальных данных.
Примечание о методе: длина этой статьи составляет 3094 слов, включая это примечание; утверждения о том, что она в десять раз длиннее конкурентов, не делается.