Тестировщик регулярных выражений
还没有匹配结果
输入正则与文本后,这里会展示每个匹配、捕获组和命名分组。
统计
命名分组汇总
当前没有命名分组。
Бесплатный онлайн-тестировщик регулярных выражений (Regex Tester) с поддержкой тестирования сопоставления в реальном времени на JS, просмотром групп захвата/именованных групп, предварительным просмотром замены, объяснением синтаксиса регулярных выражений, встроенной защитой от таймаута ReDoS через Web Worker, в комплекте с библиотекой часто используемых шаблонов регулярных выражений, идеально подходит для разработчиков для быстрой отладки и проверки регулярных выражений.
Похожие
Что такое регулярное выражение (Regex/RegExp)?
Регулярное выражение (Regular Expression, сокращённо Regex/RegExp) — это язык текстовых шаблонов, который описывает и сопоставляет ряд строк, соответствующих определённым синтаксическим правилам, с помощью одной строки. Его история восходит к математической модели нейронов, предложенной неврологом Уорреном Мак-Каллоком и математиком Уолтером Питтсом в 1950-х годах, позже математик Стивен Клини в 1956 году на этой основе предложил алгебраическое описание «регулярных множеств». Отец Unix Кен Томпсон в конце 1960-х впервые реализовал регулярные выражения в редакторе QED, после чего регулярные выражения стали основной функцией цепочки инструментов Unix (grep, sed, awk, vi).
В современных языках программирования регулярные выражения — это практически стандартная возможность — RegExp в JavaScript, модуль re в Python, java.util.regex в Java, класс Regex в .NET, пакет regexp в Go — все они обеспечивают поддержку регулярных выражений. Регулярные выражения широко применяются в таких сценариях, как проверка форм (email/номер телефона/удостоверение личности), поиск и замена текста (поиск и замена в редакторах), анализ логов (извлечение логов ERROR), веб-пауки (извлечение HTML-контента), очистка данных (ETL), сопоставление маршрутов, фильтрация ввода и защита безопасности (правила WAF).
Основные понятия регулярных выражений включают: классы символов (\d цифры, \w символы слов, \s пробелы), квантификаторы (* ноль или больше, + один или больше, ? ноль или один, {n,m} указанное количество раз), якорные символы (^ начало, $ конец, \b граница слова), группы (... группа захвата, (?:...) незахватывающая группа, (?<name>...) именованная группа), альтернация (|), наборы символов ([a-z]), просмотр вокруг ((?=...) положительный предпросмотр, (?!) отрицательный предпросмотр) и т.д. Освоение регулярных выражений значительно повышает эффективность обработки текста, но также следует помнить о защите от таких ловушек производительности, как ReDoS.
Варианты использования
- Онлайн-тестирование правильности регулярных выражений для email, номера телефона, идентификационного номера, URL и т.д. при разработке правил проверки форм
- Извлечение временных меток, сообщений об ошибках, IP-адресов из логов уровня ERROR/INFO с помощью регулярных выражений при анализе логов
- Предварительный просмотр эффекта замены регулярными выражениями при очистке данных/ETL, например преобразование формата даты, маскирование конфиденциальной информации (звёздочки посередине номера телефона)
- Проверка того, точно ли регулярное выражение для извлечения контента сопоставляет целевые фрагменты HTML или поля JSON при написании пауков
- Понимание значения каждого метасимвола и квантификатора через панель «Объяснение» при изучении регулярных выражений, быстрое освоение с помощью шаблонов
- Отправка сомнительных регулярных выражений коллегам по ссылке для обмена при Code Review для совместной отладки и оптимизации
Как использовать
- Введите регулярное выражение в поле ввода между / / вверху (не нужно добавлять косые черты самостоятельно), введите флаги (например, g, gi, gim) справа или нажмите кнопки ниже для переключения
- Вставьте или введите текст для сопоставления в области «Тестовый текст», результаты сопоставления мгновенно подсветятся разными цветами
- Нажмите на панели «Подробности сопоставления» справа, чтобы просмотреть позицию, содержимое, группы захвата и именованные группы каждого совпадения
- Перейдите на вкладку «Область замены», введите строку замены (поддерживаются ссылки $1/$&/$<name> и т.д.), смотрите результат замены в реальном времени
- Перейдите на вкладку «Объяснение выражения», чтобы просмотреть автоматически сгенерированное поэлементное объяснение синтаксиса регулярного выражения
- Если нужны часто используемые шаблоны, нажмите «Библиотека категоризированных шаблонов» слева, выберите соответствующий шаблон для заполнения в один клик; после завершения отладки нажмите «Поделиться» для генерации ссылки
Функции
- Изолированное выполнение в Web Worker: регулярные выражения выполняются в отдельном потоке Worker с автоматическим прерыванием по таймауту в 500 мс, полностью предотвращая зависание браузера из-за ReDoS
- Сопоставление в реальном времени + цветная подсветка: результаты сопоставления отображаются сразу при вводе, разные совпадения выделяются 5 цветами, при наведении отображается связанная панель с подробностями
- Группы захвата + именованные группы: для каждого совпадения автоматически разворачиваются и отображаются все группы захвата ($1/$2) и именованные группы ($<name>) с сводной статистикой
- Предварительный просмотр замены: вводите строку замены и смотрите результат в реальном времени, поддерживаются кнопки быстрого ввода синтаксиса $1/$&/$`/$'/$<name>
- Объяснение синтаксиса регулярных выражений: автоматически анализирует регулярное выражение, поэлементно объясняет значение метасимволов, квантификаторов, групп, якорных символов и т.д.
- 12 часто используемых шаблонов: встроенные 12 высокочастотных шаблонов регулярных выражений для email/URL/номера телефона/китайского языка/IPv4/UUID/даты/логов/HTML-тегов и т.д., заполнение в один клик
- Переключение 6 флагов: визуальные кнопки для переключения флагов g/i/m/s/u/y, не нужно запоминать синтаксис
- Ссылка для обмена: в один клик генерируйте URL, содержащий pattern/flags/text, скопируйте коллеге для прямого воспроизведения тестовой ситуации
- Статистика выполнения: в реальном времени отображает количество совпадений, время выполнения (мс), общее количество групп захвата, количество именованных групп
- Ограничение в 1500 совпадений: автоматическое обрезание во избежание зависания страницы из-за сверхдлинных текстов, дружественное сообщение о синтаксической ошибке для неверных регулярных выражений
Примеры кода
Сопоставление и замена регулярными выражениями в JavaScript
// Проверка формата email
const emailRe = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
console.log(emailRe.test('user@example.com')); // true
// Извлечение именованных групп (парсинг даты)
const dateRe = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/g;
const text = 'Время встречи: 2026-03-12, крайний срок: 2026-04-01';
const matches = [...text.matchAll(dateRe)];
for (const m of matches) {
console.log(m.groups.year, m.groups.month, m.groups.day);
}
// Замена: преобразование формата даты YYYY-MM-DD → MM/DD/YYYY
const reformatted = text.replace(dateRe, '$<month>/$<day>/$<year>');
console.log(reformatted);
// Время встречи: 03/12/2026, крайний срок: 04/01/2026Использование модуля re в Python
import re
# Поиск всех совпадений
text = 'Контакты: alice@example.com, bob@test.org'
emails = re.findall(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}', text)
print(emails) # ['alice@example.com', 'bob@test.org']
# Извлечение именованных групп (в Python используется синтаксис ?P<name>)
date_pattern = r'(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})'
m = re.search(date_pattern, 'Опубликовано 2026-03-12')
if m:
print(m.group('year'), m.group('month'), m.group('day'))
# Замена: маскирование средних 4 цифр номера телефона
phone_re = r'(1[3-9]\d)\d{4}(\d{4})'
result = re.sub(phone_re, r'\1****\2', 'Номер телефона: 13812345678')
print(result) # Номер телефона: 138****5678Использование java.util.regex в Java
import java.util.regex.*;
class RegexDemo {
public static void main(String[] args) {
String text = "Error [2026-03-12 18:05:09] Connection failed";
// Компиляция регулярного выражения (в продакшене следует кэшировать экземпляр Pattern)
Pattern p = Pattern.compile(
"(?<level>INFO|WARN|ERROR)\\s+\\[(?<time>[^\\]]+)\\]\\s+(?<message>.+)"
);
Matcher m = p.matcher(text);
if (m.find()) {
System.out.println("Уровень: " + m.group("level"));
System.out.println("Время: " + m.group("time"));
System.out.println("Сообщение: " + m.group("message"));
}
// Замена всех цифр
String cleaned = "abc123def456".replaceAll("\\d+", "*");
System.out.println(cleaned); // abc*def*
}
}Часто задаваемые вопросы
Что такое ReDoS? Почему при тестировании регулярных выражений нужна защита от ReDoS?
ReDoS (Regular Expression Denial of Service, отказ в обслуживании из-за регулярных выражений) — это ситуация, когда некоторые злонамеренно сконструированные регулярные выражения (например, `(a+)+$` при сопоставлении с длинными строками) вызывают катастрофический возврат (catastrophic backtracking), что приводит к 100% загрузке ЦП, зависанию браузера или падению сервера. Этот инструмент выполняет сопоставление регулярных выражений в изолированной среде Web Worker с автоматическим прерыванием по таймауту в 500 мс, поэтому даже вредоносные регулярные выражения, вызывающие возврат, не зависят ваш браузер — это ключевая функция безопасности этого инструмента.
Что означают шесть флагов g, i, m, s, u, y в регулярных выражениях?
g (global) — глобальное сопоставление, ищет все совпадения, а не только первое; i (ignoreCase) — игнорирование регистра; m (multiline) — многострочный режим, заставляет ^ и $ сопоставлять начало/конец каждой строки; s (dotAll) — заставляет точку . сопоставлять все символы, включая символ новой строки; u (unicode) — режим Unicode, корректно обрабатывает эмодзи и многобайтовые символы; y (sticky) — липкое сопоставление, точное сопоставление с позиции lastIndex. Этот инструмент предоставляет визуальные кнопки переключения для 6 флагов, нажимайте для включения/выключения в реальном времени.
Что такое группы захвата и именованные группы? Как их использовать?
Группы захвата заключаются в круглые скобки `(pattern)`, после сопоставления подстроки можно извлекать по ссылкам $1, $2 и т.д. Именованные группы используют синтаксис `(?<name>pattern)`, после сопоставления на них можно ссылаться через `$<name>`, что улучшает читаемость кода. Например, после сопоставления даты с помощью `(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})` можно переформатировать её в строке замены как `$<year>年$<month>月$<day>日`. Этот инструмент автоматически перечисляет результаты групп захвата и именованных групп для каждого совпадения.
Синтаксис регулярных выражений каких языков программирования поддерживается?
Этот инструмент основан на нативном движке RegExp JavaScript, он в целом совместим с синтаксисом основных движков, таких как JS/TypeScript, модуль Python re, Java java.util.regex, PHP preg_*, Go regexp (все основаны на направлении PCRE/Perl), основные различия — в некоторых продвинутых функциях (например, синтаксис именованных групп `(?P<name>)` в Python, переменная длина lookbehind в .NET). 99% регулярных выражений в повседневной разработке (проверка/извлечение email, номера телефона, URL, даты и т.д.) универсальны для всех движков, вы можете напрямую протестировать их в этом инструменте, а затем скопировать в код.
Как поделиться протестированным регулярным выражением с коллегами?
Нажмите кнопку «Поделиться» на верхней панели инструментов, инструмент автоматически закодирует текущее регулярное выражение, флаги и тестовый текст в параметры URL и скопирует ссылку в буфер обмена. Коллеги, открыв ссылку, увидят абсолютно идентичное состояние тестирования (pattern+flags+testText), что идеально подходит для командной работы и удалённой отладки.
Что означают специальные символы $1, $&, $`, $' в строке замены?
В строке замены: $1, $2... обозначают N-ю группу захвата; $& обозначает весь сопоставленный текст; $` обозначает часть до сопоставленного текста; $' обозначает часть после сопоставленного текста; $$ обозначает буквальный символ $; $<name> обозначает именованную группу. Например, замена `(\d{4})-(\d{2})-(\d{2})` на `$2/$3/$1` преобразует 2026-03-12 в 03/12/2026. В области замены этого инструмента есть кнопки быстрой вставки для этих специальных символов.
Глоссарий
- Regex / RegExp
- Сокращение от Regular Expression (регулярное выражение), строковый синтаксис, описывающий шаблоны сопоставления текста, используемый для поиска, замены и проверки текста.
- Группа захвата (Capture Group)
- Подвыражение, заключённое в круглые скобки (pattern), результаты сопоставления можно ссылаться по позиции через $1, $2.
- Именованная группа (Named Group)
- Группа захвата, определённая синтаксисом (?<name>pattern), на неё можно ссылаться по имени через $<name>, что обеспечивает более высокую читаемость, чем числовые ссылки.
- ReDoS
- Regular Expression Denial of Service (отказ в обслуживании из-за регулярных выражений), вызванный катастрофическим возвратом, приводящим к экспоненциальному росту времени выполнения регулярных выражений, что зависает браузер или сервер.
- Возврат (Backtracking)
- Механизм NFA-движка регулярных выражений, при котором при неудачной попытке сопоставления он возвращается к предыдущей позиции для проб других возможностей; сложные регулярные выражения могут привести к экспоненциальному возврату.
- Флаги (Flags)
- Параметры, изменяющие поведение сопоставления регулярных выражений, распространённые: g(глобальный), i(игнорирование регистра), m(многострочный), s(dotAll), u(Unicode), y(липкий).
- Просмотр вокруг (Lookaround)
- Нулевые утверждения ширины, включая положительный предпросмотр (?=...), отрицательный предпросмотр (?!...), положительный просмотр назад (?<=...), отрицательный просмотр назад (?<!...), только проверяют позицию, не потребляя символы.
- PCRE
- Perl Compatible Regular Expressions (Perl-совместимые регулярные выражения), широко используемый стандарт синтаксиса регулярных выражений, принятый большинством языков, таких как PHP, Java, Python.
- Web Worker
- API фонового потока браузера, независимый от основного потока, этот инструмент использует его для выполнения регулярных выражений в Worker, поэтому даже при возникновении ReDoS пользовательский интерфейс не блокируется.
- Квантификатор (Quantifier)
- Синтаксис, указывающий количество повторений предыдущего элемента: *(0 или больше), +(1 или больше), ?(0 или 1), {n}(ровно n раз), {n,m}(от n до m раз).
Шпаргалка по часто используемым метасимволам регулярных выражений
| Метасимвол | Значение | Пример |
|---|---|---|
. | Любой символ (кроме новой строки, с флагом s включая новую строку) | a.c сопоставляет abc, aXc, не сопоставляет a\nc |
\d | Цифровой символ, эквивалентно [0-9] | \d{3} сопоставляет 123, 456 |
\w | Символ слова, эквивалентно [A-Za-z0-9_] | \w+ сопоставляет hello_123 |
\s | Пробельный символ (пробел/табуляция/новая строка и т.д.) | a\sb сопоставляет a b (пробел посередине) |
^ | Начало строки (с флагом m — начало строки) | ^Hello сопоставляет Hello в начале строки |
$ | Конец строки (с флагом m — конец строки) | end$ сопоставляет end в конце строки |
\b | Граница слова | \bcat\b сопоставляет отдельное слово cat, не сопоставляет category |
* | Предыдущий элемент повторяется 0 или более раз (жадный) | ab*c сопоставляет ac, abc, abbc |
+ | Предыдущий элемент повторяется 1 или более раз | ab+c сопоставляет abc, abbc, не сопоставляет ac |
? | Предыдущий элемент 0 или 1 раз (или используется для нежадного/просмотра вокруг) | colou?r сопоставляет color и colour |
| | Альтернация/или, сопоставляет левую или правую часть | cat|dog сопоставляет cat или dog |
[...] | Набор символов, сопоставляет любой из символов | [aeiou] сопоставляет любую гласную букву |
Шпаргалка с часто используемыми шаблонами регулярных выражений
| Назначение | Регулярное выражение | Рекомендуемые флаги |
|---|---|---|
| Адрес email | [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,} | g |
| Номер мобильного телефона материкового Китая | 1[3-9]\d{9} | g |
| Ссылка URL | https?:\/\/[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b[-a-zA-Z0-9()@:%_+.~#?&/=]* | gi |
| Адрес IPv4 | \b(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\b | g |
| Дата YYYY-MM-DD | \d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01]) | g |
| Идентификационный номер (18 цифр) | [1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])\d{3}[\dXx] | g |
| UUID | [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12} | gi |
Authoritative References
- Симулятор дальтонизма
- Конвертер цветов
- Конвертер .htaccess в Nginx
- SQL Конвертер
- Парсер Cookie
- Генератор Cron-выражений
- Валидатор Cron-выражений
- Форматирование CSS
- Минификация CSS
- CSV в Excel
- Конвертер валют
- Сравнение текста
- Генератор иконок сайта
- Форматирование XML
- Шестнадцатеричный конвертер
- Форматирование HTML
- Минификация HTML
- HTML в Markdown
- Markdown в HTML
- Форматирование JavaScript
- Минификация JS
- Форматировщик JSX
- Минификация JSX
- Кластеризация ключевых слов
- Генератор Lorem Ipsum
- Генератор Markdown-таблиц
- Генератор мета-тегов
- Генератор паролей
- Проверка надёжности пароля
- Генератор QR Code и штрихкодов
- Тестировщик регулярных выражений
- Генератор slug
- Генератор SQL
- Форматировщик SQL
- Счётчик Слов
- Инструмент времени
- Форматирование TS
- Сжатие TS
- Форматирование TSX
- Сжатие TSX
- Конвертер Unix Timestamp
- Генератор UUID
- Форматирование YAML
- Преобразование корпуса