logo
GeekFormat

Тестировщик регулярных выражений

Regex Tester
//
无匹配
Worker · 500ms 超时中断
分类模板库
点选即可填充 pattern / flags / demo
测试文本37
匹配详情
0

还没有匹配结果

输入正则与文本后,这里会展示每个匹配、捕获组和命名分组。

匹配高亮预览· Hover / 点击右侧条目联动
Ada Lovelace Alan Turing Grace Hopper

统计

匹配数量
0
执行耗时
0ms
捕获组
0
命名分组
0

命名分组汇总

当前没有命名分组。

Бесплатный онлайн-тестировщик регулярных выражений (Regex Tester) с поддержкой тестирования сопоставления в реальном времени на JS, просмотром групп захвата/именованных групп, предварительным просмотром замены, объяснением синтаксиса регулярных выражений, встроенной защитой от таймаута ReDoS через Web Worker, в комплекте с библиотекой часто используемых шаблонов регулярных выражений, идеально подходит для разработчиков для быстрой отладки и проверки регулярных выражений.

Похожие

Варианты использования

  • Онлайн-тестирование правильности регулярных выражений для email, номера телефона, идентификационного номера, URL и т.д. при разработке правил проверки форм
  • Извлечение временных меток, сообщений об ошибках, IP-адресов из логов уровня ERROR/INFO с помощью регулярных выражений при анализе логов
  • Предварительный просмотр эффекта замены регулярными выражениями при очистке данных/ETL, например преобразование формата даты, маскирование конфиденциальной информации (звёздочки посередине номера телефона)
  • Проверка того, точно ли регулярное выражение для извлечения контента сопоставляет целевые фрагменты HTML или поля JSON при написании пауков
  • Понимание значения каждого метасимвола и квантификатора через панель «Объяснение» при изучении регулярных выражений, быстрое освоение с помощью шаблонов
  • Отправка сомнительных регулярных выражений коллегам по ссылке для обмена при Code Review для совместной отладки и оптимизации

Функции

  • Изолированное выполнение в 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 совпадений: автоматическое обрезание во избежание зависания страницы из-за сверхдлинных текстов, дружественное сообщение о синтаксической ошибке для неверных регулярных выражений

Как использовать

  1. Введите регулярное выражение в поле ввода между / / вверху (не нужно добавлять косые черты самостоятельно), введите флаги (например, g, gi, gim) справа или нажмите кнопки ниже для переключения
  2. Вставьте или введите текст для сопоставления в области «Тестовый текст», результаты сопоставления мгновенно подсветятся разными цветами
  3. Нажмите на панели «Подробности сопоставления» справа, чтобы просмотреть позицию, содержимое, группы захвата и именованные группы каждого совпадения
  4. Перейдите на вкладку «Область замены», введите строку замены (поддерживаются ссылки $1/$&/$<name> и т.д.), смотрите результат замены в реальном времени
  5. Перейдите на вкладку «Объяснение выражения», чтобы просмотреть автоматически сгенерированное поэлементное объяснение синтаксиса регулярного выражения
  6. Если нужны часто используемые шаблоны, нажмите «Библиотека категоризированных шаблонов» слева, выберите соответствующий шаблон для заполнения в один клик; после завершения отладки нажмите «Поделиться» для генерации ссылки

Часто задаваемые вопросы

Что такое 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, сокращённо 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.

术语表

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
Ссылка URLhttps?:\/\/[-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?)\bg
Дата 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

Code Examples

Сопоставление и замена регулярными выражениями в 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*
    }
}

Authoritative References