CodeKitHub
Русский
Текстовые инструменты

Онлайн-тестер регулярных выражений

Составьте регулярное выражение и сразу же, по мере ввода, увидите выделенные совпадения в тестовом тексте. Группы захвата отображаются для каждого совпадения, поддерживаются все флаги регулярных выражений JavaScript. Отлично подходит для создания и отладки шаблонов перед их внедрением в код.

//

    Что это за инструмент?

    Регулярное выражение (regex) — это лаконичный язык шаблонов, предназначенный для поиска, проверки и извлечения текста: шаблон адреса электронной почты позволяет проверять данные, введенные в форму, выражение \d{4}-\d{2}-\d{2} позволяет находить даты, а группы захвата — извлекать нужные фрагменты. Практически все языки программирования и редакторы поддерживают регулярные выражения.

    Этот тестер использует механизм регулярных выражений JavaScript — тот же, что работает в Node.js и во всех браузерах, — поэтому шаблоны, которые вы создаете здесь, будут вести себя точно так же в вашем коде на JavaScript/TypeScript. Большинство шаблонов также работают без изменений в Python, Java и Go.

    Зачем его использовать?

    • Отображение результатов в режиме реального времени: совпадения выделяются желтым цветом по мере ввода шаблона.
    • Группы захвата, отображаемые для каждого совпадения — посмотрите, что именно будут содержать группы «$1» и «$2».
    • Полная поддержка опций: g (все совпадения), i (игнорировать регистр), m (многострочный режим), s (точка соответствует символу новой строки), u (Юникод).
    • Отображать сообщения об ошибках, если в шаблоне допущена синтаксическая ошибка.
    • Бесплатно и конфиденциально — шаблон и текст никогда не покидают ваш браузер.

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

    1. Введите свой шаблон между двумя символами / (косые черты не нужно обозначать с помощью экранирующих символов).
    2. Настройте флаги в небольшом поле после второго символа «/» — по умолчанию параметр «g» находит все совпадения.
    3. Вставьте ниже текст для проверки.
    4. Совпадения выделяются мгновенно; группы совпадений перечислены ниже.
    5. Если шаблон неверный, в сообщении об ошибке объясняется, в чём заключается проблема.

    Пример

    Ввод

    Pattern: (\w+)@(\w+)\.com
    Test string: Contact alice@example.com or bob@test.com

    Результат

    ✓ 2 matches
    #1 groups: $1=alice  $2=example
    #2 groups: $1=bob  $2=test

    Скобки создают группы захвата, на которые можно ссылаться как на $1 и $2 при замене.

    Практические советы

    • Проверка введенного адреса электронной почты? ^[^\s@]+@[^\s@]+\.[^\s@]+$ — это разрешительный шаблон, который выявляет очевидные опечатки, не отбрасывая при этом допустимые, но необычные адреса — для полного соответствия стандарту RFC 5322 потребуется библиотека, а не однострочный код.
    • Извлечение параметров запроса из URL: [?&]([^=]+)=([^&]*) с флагом g, после чего считываются $1/$2 за каждое совпадение вместо ручного разделения по символам & и =.
    • Собираетесь использовать шаблон в методе .replace()? Сначала проверьте его здесь — выделенный текст соответствует тому, что именно будет заменено методом .replace(), включая группы захвата.
    • Анализ многострочных логов (поиск совпадений с временной меткой в начале каждой строки)? Добавьте флаг m, чтобы символы ^ и $ фиксировались в начале каждой строки, а не всей строки.
    • Скопировали шаблон из Python или PHP, и он здесь не работает? Проверьте наличие именованных групп (?P<name>...) — в JavaScript используются (?<name>...), без буквы P — или квантификаторов владения (++, *+), которых в регулярных выражениях JavaScript нет.

    Тестер регулярных выражений на JavaScript, но не универсальный

    Этот инструмент использует встроенный в JavaScript движок RegExp — именно тот же алгоритм, который реализуется при вызове str.match(pattern) или pattern.test(str) в консоли браузера или в Node.js. Это отличается от тестирования с помощью PCRE (который используется в PHP и по умолчанию во многих «универсальных» тестерах регулярных выражений) или модуля re в Python: в JavaScript нет притяжательных квантификаторов и атомарных групп, а для именованных групп захвата используется синтаксис (?<name>...) вместо (?P<name>...) в PCRE/Python.

    Если вы собираетесь использовать шаблон в JS или TypeScript — например, для проверки форм, сопоставления маршрутов или анализа логов — его тестирование здесь гарантирует полное соответствие: то, что выделяется на этой странице, точно соответствует тому, что сопоставляется новой функцией RegExp(pattern, flags) во время выполнения.

    Как это вписывается в реальные рабочие процессы

    Тест с использованием регулярных выражений редко проводится отдельно. Обычно действуют следующим образом: сначала проверяют шаблон здесь, затем выполняют собственно вызов .replace() в коде, а после сравнивают исходный и полученный текст, чтобы убедиться, что замена дала ожидаемый результат и не привела к никаким побочным эффектам.

    При извлечении структурированных данных с помощью групп захвата результаты часто сразу выводятся в формате JSON — отформатируйте извлеченные данные, чтобы проверить, правильно ли они были проанализированы.

    Сравнение текстов · Форматировщик JSON

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

    Какой вариант регулярных выражений используется в этом тестере?

    JavaScript (ECMAScript) — движок, используемый во всех браузерах и в Node.js. Основной синтаксис является переносимым, однако некоторые особенности различаются в разных языках — например, поддержка обратного просмотра и синтаксис именованных групп в Python и Java отличаются друг от друга.

    Почему мой шаблон находит только первое совпадение?

    Отсутствует флаг g (global). Без флага g регулярное выражение останавливается после первого совпадения. По умолчанию в этом инструменте используется флаг g — убедитесь, что вы его не удалили.

    Почему . не соответствует моим разрывам строк?

    По умолчанию символ «.» соответствует любому символу, кроме символов новой строки. Добавьте флаг «s» (dotall), чтобы символ «.» соответствовал также символам новой строки, или используйте [\s\S] в качестве переносимой альтернативы.

    Что означают результаты анализа групп захвата?

    Каждая пара скобок в вашем шаблоне фиксирует текст, с которым она совпала. $1 — это первая группа, $2 — вторая и так далее; именно на них вы ссылаетесь при выполнении операций замены и в коде извлечения.

    Почему моё регулярное выражение работает медленно или зависает?

    Вероятно, произошло катастрофическое обратное прослеживание, вызванное вложенными квантификаторами, такими как (a+)+, при несоответствии входных данных. Перепишите шаблон, чтобы избежать неоднозначных повторений. Для обеспечения оперативности работы этот инструмент ограничивает количество совпадений 1000.

    Похожие инструменты