oLoveTools
Изолированный движок регулярок

Онлайн-тестер, отладчик и разъяснитель регулярных выражений

Создавайте, тестируйте и отлаживайте регулярные выражения с настоящим синтаксическим деревом, позициями каждой группы захвата, предупреждениями о катастрофическом бэктрекинге и экспортом кода на десять языков — всё внутри вкладки.

Каждое совпадение с позициями и группами
Шаблон объясняется деревом, а не плоским списком
Разогнавшиеся шаблоны убиваются, а не морозят вкладку
Экспорт в JavaScript, Python, Go, Rust и ещё шесть языков
Регулярное выражение
/
/
КорректноСовпадений нетИзолировано
  • Внутри [ ] точка и так буквальная, экранировать её незачем.
Тестовый текст

Нажмите на подсветку, чтобы выбрать это совпадение. Удерживайте Alt, чтобы увидеть текст без подсветки; F3 и Shift+F3 переходят между совпадениями.

Дальше
Совпадения

Совпадений нет

Шаблон корректен, он просто не встречается в этом тексте. Проверьте флаги: без g сообщается только о первом совпадении.

Что делает этот шаблон
  • [\w.%+-]+Повторяется один или больше раз — жадный: берёт сколько может и отдаёт назад только по необходимости
    • [\w.%+-]Любой один символ из: \w . % + -
  • @Символ «@»
  • [\w.-]+Повторяется один или больше раз — жадный: берёт сколько может и отдаёт назад только по необходимости
    • [\w.-]Любой один символ из: \w . -
  • \.Символ «.», взятый буквально
  • [A-Za-z]{2,}Повторяется не меньше 2 раз — жадный: берёт сколько может и отдаёт назад только по необходимости
    • [A-Za-z]Любой один символ из: A–Z a–z

Как это работает

1

Напишите шаблон

Наберите его, возьмите из библиотеки или вставьте присланную ссылку. Шаблон подсвечивается по тому, чем каждый кусок является на самом деле, а ошибки подчёркиваются ровно там, где они есть.

2

Выставьте флаги и режим

Включайте g, i, m, s, u, v, y и d, а затем выберите: искать, заменять или разбивать. Выключите режим «вживую», если хотите, чтобы ничего не выполнялось до нажатия кнопки.

3

Запустите безопасно

Поиск идёт в Web Worker с лимитом в две секунды. Каждое совпадение возвращается с позициями и группами захвата, а панель предупреждает заранее о шаблоне, который может не закончиться никогда.

4

Заберите с собой

Скопируйте регулярку, выгрузите совпадения в JSON или CSV, сгенерируйте эквивалентный код для десяти языков или отправьте результат прямо в другой инструмент oLoveTools.

Парсер, а не токенизатор

Шаблон разбирается в настоящее синтаксическое дерево, поэтому объяснение показывает, что внутри чего — и не ошибается на именованных группах. Токенизатор читает (?<year>\d{4}) как группу захвата, за которой идёт необязательное нечто; парсер читает именованную группу, которой это и является.

Движок работает там, где его можно убить

Поиск идёт в Web Worker под присмотром сторожевого таймера. Замерено здесь: (a+)+$ против 31 символа занимает больше четырёх минут чистого процессорного времени на том же движке, что и в вашем браузере. На странице это мёртвая вкладка; в воркере — запуск, который прерывают через две секунды.

Совпадения с настоящими позициями

Флаг d включается за кулисами, поэтому каждая группа захвата несёт своё начало и конец, а не только то, что поймала. Именно это позволяет рисовать группы внутри подсвеченного совпадения и прыгать из списка к нужным символам.

Предупреждает до того, как обожжётесь

Вложенные квантификаторы над пересекающимися символами, квантификаторы вокруг того, что может ничего не потребить, обратные ссылки на несуществующие группы, \p{…} без флага u и ретроспективная проверка на слишком старом браузере — всё это отмечается до любого запуска.

Экспорт на десять языков

JavaScript, TypeScript, Python, Java, C#, PHP, Go, Rust, Ruby и grep/sed, с правильно переведёнными флагами и заменой, переписанной в синтаксис каждого языка. Фрагменты для Go и Rust честно сообщают, когда шаблон использует то, чего RE2 не умеет.

Связан с остальным набором

Отправьте заменённый текст, части после разбиения или совпадения в JSON прямо в WordFlow, DiffSnap, JSONFlow, CodeCard или HashBolt — без похода в папку загрузок.

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

Тестер регулярок, который не может подвесить браузер

Регулярные выражения — единственное, что тестер обязан выполнять до того, как они станут правильными, а неправильное может оказаться патологическим: шаблон вроде (a+)+$ против строки, которая почти подходит, занимает экспоненциальное время, и движок браузера нельзя прервать. RegexFlow выполняет каждый поиск внутри Web Worker со сторожевым таймером на две секунды. Если запуск затягивается, воркер завершается и заменяется новым, и вы получаете сообщение вместо замороженной вкладки со своим шаблоном внутри.

Группы захвата с именами и позициями
Замена и разбиение, а не только поиск
Предупреждения о бэктрекинге до запуска
Десять целевых языков

Ничего не покидает вкладку

Шаблон, тестовый текст, строка замены и любой открытый файл обрабатываются целиком в вашем браузере — без загрузки на сервер и без обращений к нему. Файлы читаются собственным FileReader браузера. Единственное, что может уйти наружу, — ссылка для обмена, и только когда вы нажмёте кнопку, которая её собирает.

От рабочего шаблона к рабочему коду

Сделано для отладки, а не для демонстрации

Разбор логов, который должен пережить кривую строку, валидация, которая должна отклонять не хуже, чем принимать, поиск с заменой по всему репозиторию, где $1 обязан попасть в нужное место, и тот момент, когда вам достаётся чужой шаблон в сорок символов и надо понять, что он делает, прежде чем его трогать. Дерево объяснений, позиции и таблица групп — именно для этого момента.

Движок тот же, под который вы будете выпускать

Поиск использует собственный RegExp вашего браузера, поэтому то, что вы видите, — ровно то, что сделает ваш JavaScript, включая места, где поведение расходится: именно поэтому инструмент проверяет поддержку ретроспективных проверок и unicodeSets, а не считает их данностью. При экспорте в Python, Go или Rust различия проговариваются, а не превращаются молча во фрагмент, который не соберётся.

Частые вопросы

QОтправляются ли куда-нибудь мой шаблон или тестовый текст?

Нет. Всё выполняется на JavaScript внутри вашей вкладки, включая файлы, которые вы открываете: они читаются браузерным FileReader и никогда не загружаются на сервер. Можно отключиться от интернета — инструмент продолжит работать.

QЧто будет, если я напишу шаблон, который никогда не закончится?

Его убьют. Поиск идёт в Web Worker со сторожевым таймером на две секунды; если воркер не отвечает вовремя, его завершают, а на его место встаёт новый. Это важнее, чем кажется: замерено на том же движке, что и в вашем браузере, — (a+)+$ против 31 символа работал больше четырёх минут. В главном потоке это вкладка, которую вы уже не вернёте.

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

Родной RegExp вашего браузера, поэтому то, что вы тестируете, — ровно то, что сделает ваш JavaScript. Там, где поддержка расходится, инструмент проверяет, а не предполагает: ретроспективные проверки (в Safari они появились только в 16.4), флаг v для unicodeSets и флаг d для позиций групп. Если чего-то нет, вам скажут прямо, вместо непонятной ошибки.

QПочему объяснение шаблона — это дерево?

Потому что плоский список не может показать, что внутри чего, и потому что токенизатор ошибается там, где парсер не ошибается: (?<year>\d{4}) — это именованная группа, а не группа захвата с необязательным символом после неё. Каждая строка связана ровно с теми символами, которые описывает, поэтому при наведении они подсвечиваются в шаблоне.

QПоддерживает ли замена $1 и именованные группы?

Да: от $1 до $99, $<имя>, $& для всего совпадения, $` и $' для текста вокруг и $$ для буквального доллара. Каждый набранный токен перечислен ниже вместе с тем, во что он превратится, а сгенерированный код переписывает их в синтаксис нужного языка — \g<имя> для Python, ${имя} для Java и C#.

QМожно ли работать с большим файлом?

Да, но после 40 000 символов инструмент перестаёт пересчитывать сам и ждёт нажатия кнопки «Выполнить» — искать по большому файлу на каждое нажатие клавиши бессмысленно. Режим «вживую» можно выключить при любом размере и остаться полностью на ручном управлении.

QПочему сгенерированный код для Go идёт с предупреждением?

Go и Rust используют RE2, который по замыслу работает за линейное время и поэтому не имеет ни опережающих, ни ретроспективных проверок, ни обратных ссылок. Если ваш шаблон их использует, фрагмент всё равно показывается, но с пометкой, что в таком виде он не соберётся, — это полезнее, чем фрагмент, который молча падает.

QЧто означают цвета в тестовом тексте?

Каждое совпадение обведено фуксией, а выбранное ярче. Внутри выбранного группы захвата получают собственные фиолетовые участки, так что видно, какие именно символы попали в $1. Удерживайте Alt, чтобы спрятать всю подсветку и прочитать текст таким, какой он есть.

Похожие запросы

тестер регулярных выраженийпроверить регулярное выражениеотладчик регулярокобъяснить регулярное выражениеконструктор регулярок онлайнзамена по регулярному выражениюкатастрофический бэктрекингрегулярка в pythonтестер регулярок javascriptименованные группы захвата
Часть набора oLoveTools
oLoveTools

Бесплатный, приватный и локальный верстак для регулярных выражений.

© 2026 oLoveToolsО нас

RegexFlow | Бесплатный тестер и отладчик регулярных выражений

Бесплатный тестер регулярок с живой подсветкой, позициями групп захвата, объяснением в виде дерева, предупреждениями о бэктрекинге и экспортом в Python, Go, Java и другие. 100% в браузере.

Частые вопросы

Отправляются ли куда-нибудь мой шаблон или тестовый текст?

Нет. Всё выполняется на JavaScript внутри вашей вкладки, включая файлы, которые вы открываете: они читаются браузерным FileReader и никогда не загружаются на сервер. Можно отключиться от интернета — инструмент продолжит работать.

Что будет, если я напишу шаблон, который никогда не закончится?

Его убьют. Поиск идёт в Web Worker со сторожевым таймером на две секунды; если воркер не отвечает вовремя, его завершают, а на его место встаёт новый. Это важнее, чем кажется: замерено на том же движке, что и в вашем браузере, — (a+)+$ против 31 символа работал больше четырёх минут. В главном потоке это вкладка, которую вы уже не вернёте.

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

Родной RegExp вашего браузера, поэтому то, что вы тестируете, — ровно то, что сделает ваш JavaScript. Там, где поддержка расходится, инструмент проверяет, а не предполагает: ретроспективные проверки (в Safari они появились только в 16.4), флаг v для unicodeSets и флаг d для позиций групп. Если чего-то нет, вам скажут прямо, вместо непонятной ошибки.

Почему объяснение шаблона — это дерево?

Потому что плоский список не может показать, что внутри чего, и потому что токенизатор ошибается там, где парсер не ошибается: (?<year>\d{4}) — это именованная группа, а не группа захвата с необязательным символом после неё. Каждая строка связана ровно с теми символами, которые описывает, поэтому при наведении они подсвечиваются в шаблоне.

Поддерживает ли замена $1 и именованные группы?

Да: от $1 до $99, $<имя>, $& для всего совпадения, $` и $' для текста вокруг и $$ для буквального доллара. Каждый набранный токен перечислен ниже вместе с тем, во что он превратится, а сгенерированный код переписывает их в синтаксис нужного языка — \g<имя> для Python, ${имя} для Java и C#.

Можно ли работать с большим файлом?

Да, но после 40 000 символов инструмент перестаёт пересчитывать сам и ждёт нажатия кнопки «Выполнить» — искать по большому файлу на каждое нажатие клавиши бессмысленно. Режим «вживую» можно выключить при любом размере и остаться полностью на ручном управлении.

Почему сгенерированный код для Go идёт с предупреждением?

Go и Rust используют RE2, который по замыслу работает за линейное время и поэтому не имеет ни опережающих, ни ретроспективных проверок, ни обратных ссылок. Если ваш шаблон их использует, фрагмент всё равно показывается, но с пометкой, что в таком виде он не соберётся, — это полезнее, чем фрагмент, который молча падает.

Что означают цвета в тестовом тексте?

Каждое совпадение обведено фуксией, а выбранное ярче. Внутри выбранного группы захвата получают собственные фиолетовые участки, так что видно, какие именно символы попали в $1. Удерживайте Alt, чтобы спрятать всю подсветку и прочитать текст таким, какой он есть.

Похожие запросы

тестер регулярных выражений, проверить регулярное выражение, отладчик регулярок, объяснить регулярное выражение, конструктор регулярок онлайн, замена по регулярному выражению, катастрофический бэктрекинг, регулярка в python, тестер регулярок javascript, именованные группы захвата