Skip to content

Бесплатный тестер regex — отладка совпадений онлайн

Тестируйте регулярные выражения мгновенно на любом тексте. Подсветка совпадений, группы захвата, предпросмотр замены, разбиение и пояснение. Regex в стиле JavaScript, бесплатно, конфиденциально, без регистрации.

Без отслеживания Работает в браузере Бесплатно
Всё тестирование происходит локально в вашем браузере. Ваш шаблон и текст никогда не покидают это устройство.
Флаги
Подсвеченные совпадения
Совпадения и группы захвата
Проверено на верность ECMA-262, корректность групп захвата (с флагом /d и без), паритет шаблонов замены со String.prototype.replace, устойчивость к ReDoS через бюджетирование «настенных часов» и доступность (ARIA-роли, объявления совпадений для screen reader, обработка RTL/LTR). — Команда инструментов работы с текстом Go Tools · May 21, 2026

Что такое тестер regex?

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

Регулярное выражение — это компактный язык для описания текстовых шаблонов. `\d+` совпадает с одной или более цифрой. `[A-Za-z_]\w*` совпадает с типичным идентификатором. `(?\d{4})-(?\d{2})-(?\d{2})` совпадает с ISO-датой и именует каждую часть. Регулярные выражения — это хребет поиска и замены в каждом редакторе кода, валидации в каждой форме, парсинга логов в каждом стеке наблюдаемости и `grep`, `sed`, `awk` — Unix-инструментов, на которых работает половина интернета. И их же печально известно сложно писать правильно: квантификатор на единицу, не туда поставленный escape могут совпасть с не той подстрокой, полностью промахнуться или — в худшем случае — спровоцировать катастрофический бэктрекинг, который возьмёт ядро CPU в заложники. Хороший тестер regex ловит каждый из этих режимов отказа до того, как они попадут в продакшен.

Этот тестер запускает нативный движок RegExp ECMA-262, поставляющийся с каждым современным браузером — тот же движок, что вы зовёте из JavaScript, TypeScript, Node.js, Deno или Bun. Это значит: группы захвата (нумерованные и именованные через `(?...)`), look-ahead и look-behind утверждения (`(?=...)`, `(?!...)`, `(?<=...)`, `(?

Что тестер показывает помимо сырых совпадений: панель «Совпадения и группы захвата» перечисляет каждое совпадение со смещениями [start, end) и значением каждой группы захвата — ту же информацию, что вы получили бы от `String.prototype.matchAll` с флагом /d, но разложенную под визуальный просмотр. Вкладка Replace показывает живой предпросмотр подстановки, поддерживающий весь алфавит шаблонов $1 / $& / $` / $' / $$ / $ — ровно то, что принимает String.replace в JavaScript. Вкладка Split применяет String.split с regex и показывает каждую часть. Вкладка Explain токенизирует шаблон и аннотирует каждый кусок простым языком — полезно для code review, обучения и переноса между диалектами.

По части конфиденциальности: каждая операция локальна. Ваш шаблон и тестовый текст никогда не покидают страницу — они не логируются, не отправляются в аналитический сервис, не сохраняются на диск. В localStorage сохраняются только ваши UI-настройки (активная вкладка и какие флаги вы обычно держите включёнными). Это делает инструмент безопасным для отредактированных образцов логов, проприетарных шаблонов, внутренней конфигурации и шаблонов, содержащих подсказки о схеме ваших данных. По сравнению с тестерами на серверной поддержке вроде regex101 история приватности и латентности строго лучше; компромисс — поддержка только одного диалекта (только JavaScript).

Если вы новичок в regex, выпадающий список «Распространённые шаблоны» поставляется с проверенными стартерами: email-адрес, URL, IPv4, UUID, hex-цвет, ISO-дата, телефонный номер США и шаблон срезания концевых пробелов. Загрузите один, понаблюдайте за совпадениями на предложенном образце текста, потом мутируйте шаблон по одному символу, чтобы прочувствовать, как откликается движок. Сочетайте это с инструментом Text Diff, когда хотите сравнить до/после очистки на основе regex, с JSON Formatter, когда ваш ввод или ожидаемый вывод — JSON, или с URL-кодировщиком, когда строки, с которыми вы совпадаете, URL-закодированы.

// The pattern you build in this tester drops straight into JavaScript.
// Example: extract every ISO date from a string with named groups.

const pattern = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/g;
const text = 'shipped 2026-05-21, scheduled 2026-06-30';

for (const m of text.matchAll(pattern)) {
  console.log(m.groups.year, m.groups.month, m.groups.day);
  // → 2026 05 21
  // → 2026 06 30
}

// Same regex, used in a replace with $<name> templates:
text.replace(pattern, '$<day>/$<month>/$<year>');
// → 'shipped 21/05/2026, scheduled 30/06/2026'

// With the /d flag, every match carries [start, end] indices
// per capture group — the Matches panel uses this to paint offsets.
const p2 = /(?<year>\d{4})-(?<month>\d{2})/gd;
const m = [...text.matchAll(p2)][0];
m.indices.groups.year; // [8, 12]

Ключевые возможности

Подсветка совпадений в реальном времени

Каждое совпадение в тестовом тексте загорается в тот момент, как ваш шаблон распарсился. Чередующиеся цвета позволяют легко считать соседние совпадения визуально, а бейдж счётчика над результатом сообщает точный итог — без кнопки Run, без задержки debounce свыше 200мс.

Боковая панель групп захвата

Панель «Совпадения и группы захвата» справа перечисляет каждое совпадение как карточку со смещениями [start, end), полным текстом совпадения и каждой позиционной и именованной группой захвата внутри. Именованные группы помечают себя как $, чтобы вы читали данные так же, как будете потреблять их в коде.

Живой предпросмотр Replace с $1 / $& / $

Переключитесь на вкладку Replace, чтобы увидеть вашу подстановку, применённую в реальном времени. Работает полный алфавит замен ECMAScript: $1..$N для позиционных, $ для именованных, $& для всего совпадения, $` и $' для префикса/суффикса, $$ для литерального доллара. Панели ввода и вывода бок о бок с копированием в один клик.

Разбиение по границам regex

Вкладка Split вызывает String.prototype.split с вашим regex и показывает каждую часть как нумерованный список. Пустые части отрисовываются глифом ⏎, чтобы вы видели, как движок обработал соседние разделители — полезно для отладки чистки CSV-подобного ввода.

Пояснитель шаблона (токен за токеном)

Вкладка Explain токенизирует ваш шаблон в чипсы, окрашенные по классу (escape / квантификатор / класс символов / группа / якорь / альтернация) и аннотирует каждый чипс однострочным описанием. Прочитайте свой regex самому себе перед отгрузкой; используйте для code review или обучения.

ReDoS-безопасность (тайм-аут по «настенным часам»)

Каждый вызов match обёрнут в бюджет 250 миллисекунд. Классические формы катастрофического бэктрекинга вроде `(a+)+`, `(a|aa)+b` и глубоко вложенные квантификаторы чисто прерываются с предупреждением «Шаблон превысил тайм-аут» — страница остаётся отзывчивой вместо блокировки вкладки. Обнаружение без серверной песочницы.

Библиотека распространённых шаблонов

Проверенные стартеры для восьми шаблонов, к которым разработчики тянутся чаще всего: email, URL, IPv4, UUID v4, hex-цвет, ISO-дата, телефонный номер США и срезание концевых пробелов. Каждый загружается с подходящим образцом, чтобы вы увидели regex в работе перед тем, как адаптировать.

Постоянные ссылки (без загрузки)

«Скопировать ссылку» кодирует шаблон + флаги + образец текста в хэш URL (#p=…&f=gim&t=…). Браузеры никогда не передают фрагменты URL в запросах, поэтому общая ссылка воспроизводит ваше состояние на машине получателя, не касаясь серверов go-tools.org. Самодостаточно, дружелюбно к аудиту.

Конфиденциальность 100% в браузере

Ваш regex и тестовый текст никогда не покидают устройство. Без сетевых запросов, без логирования, без аналитики того, что вы вводите. Проверьте в DevTools → Network: ноль запросов при вводе. Безопасно для проприетарных шаблонов, отредактированных логов и любого текста, который вы не вставили бы в regex101.

Проработанные примеры

Извлечь все email-адреса из абзаца

[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g

Вставьте шаблон с включённым флагом /g, бросьте абзац в поле тестового текста — и каждый email загорится в подсвеченном виде. Панель «Совпадения и группы захвата» справа перечислит каждый адрес со смещениями [start, end) — пригодится, когда тот же regex уйдёт в grep, sed или редактор кода.

Захватить части даты именованными группами

(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})
/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/g

Именованные группы ECMA-262 появляются в правой панели как $, $, $. Переключитесь на вкладку Replace и попробуйте $/$/$, чтобы переформатировать ISO-даты в DMY одним проходом — тот же трюк работает в любом современном JS-вызове replace.

Поиск и замена с обратными ссылками $1

(\w+) (\w+)
Замена: $2, $1   →   Jack Doe → Doe, Jack

Две неименованные группы захвата, шаблон замены $2, $1, и вкладка Replace даёт живой предпросмотр. $&, $`, $', $$ и $ — всё поддерживается, ровно тот алфавит подстановки из спецификации ECMAScript, что вы скопируете, тот и запустится без изменений в любом JS-движке.

Срезать концевые пробелы построчно

[ \t]+$
/[ \t]+$/gm

Скомбинируйте флаги /g (глобальный) и /m (многострочный), чтобы $ цеплялся к каждому концу строки, а не только к концу ввода. Вкладка Replace с пустой заменой показывает чистый diff: концевые табы и пробелы исчезают, проза остаётся на месте. Тот же regex с выключенным /s (dotAll) не даёт точке пересекать переводы строк.

Обнаружить катастрофический бэктрекинг и пережить его

(a+)+b
Тестовый текст: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac

Вложенные квантификаторы + образуют классический ReDoS-шаблон. В наивном тестере это вешает вкладку. Здесь сторож по «настенным часам» срабатывает после 250мс, появляется баннер «Шаблон превысил тайм-аут», а страница остаётся отзывчивой. Заякорите шаблон, переключитесь на непересекающуюся альтернацию или используйте атомные идиомы — и протестируйте заново.

Разбить CSV-подобную строку по смешанным разделителям

[,;|]\s*
alpha, beta; gamma | delta → ["alpha", "beta", "gamma", "delta"]

Переключитесь на вкладку Split. Любая запятая, точка с запятой или вертикальная черта (с необязательным пробелом после) становится границей части. Удобно для чистки скопированных списков тегов, нормализации пользовательского ввода или предобработки полей лога перед настоящим CSV-парсером — посмотрите CSV to JSON, когда данные действительно по RFC 4180.

Как пользоваться тестером regex

  1. 1

    Введите шаблон между слэшами

    Бросьте любое регулярное выражение ECMA-262 в поле /…/. Плохие шаблоны подсвечиваются красным с сообщением парсера; валидные шаблоны идут на живой матчинг.

  2. 2

    Переключите нужные флаги

    g (global), i (case-insensitive), m (multiline), s (dotAll), u (unicode), y (sticky), d (indices). Каждый чипс загорается, когда включён; индикатор справа от шаблона показывает канонический литерал.

  3. 3

    Вставьте тестовый текст

    Совпадения подсвечиваются чередующимися цветами по мере ввода. Панель «Совпадения и группы захвата» справа перечисляет каждое совпадение со смещениями [start, end) и значением каждой группы захвата (именованные группы помечены как $).

  4. 4

    Переключайтесь между вкладками Replace, Split и Explain

    Replace предпросматривает шаблон подстановки рядом с вводом. Split режет по каждой границе совпадения. Explain разбирает шаблон токен за токеном с описанием простым языком для каждого элемента.

  5. 5

    Скопируйте литерал или поделитесь постоянной ссылкой

    «Скопировать /pattern/flags» бросает канонический regex-литерал в буфер обмена для прямого использования в JavaScript / TypeScript / Node. «Скопировать ссылку» кодирует полное состояние в URL-хэш (без загрузки), чтобы коллега мог воспроизвести его локально.

Типичные ошибки в regex

Забыли флаг /g и получили только одно совпадение

Без /g (или /y) движок останавливается после первого совпадения. Методы match, matchAll, replace и split все ведут себя по-разному вокруг глобального флага. Переключите /g и перезапустите; счётчик над результатами прыгнет с 1 до N.

✗ Неверно
Шаблон: /\d+/  →  '1 22 333' даёт только ['1']
✓ Верно
Шаблон: /\d+/g  →  '1 22 333' даёт ['1', '22', '333']

Кто пользуется этим инструментом

Валидировать ввод форм перед отгрузкой
Подтвердите, что ваш regex для email / телефона / индекса / username совпадает с тем, что вы ожидаете — и отвергает то, что не ожидаете — по крайним случаям (Unicode-имена, plus-aliasing, международные форматы) до того, как валидация попадёт в продакшен и оттолкнёт реальных пользователей.
Извлекать данные из логов и конфигов
Постройте шаблон, который вытаскивает request ID, статус-коды, латентность или строки stack-trace из произвольного куска лога. Именованные группы делают данные самодокументируемыми; панель Совпадений показывает смещения, чтобы потом пустить тот же regex в `rg --replace` или `grep -oE`.
Поиск и замена по кодовой базе
Набросайте refactor-шаблон (напр. `(\w+)\.apply\(null,\s*\[(.*?)\]\)` → `$1($2)`) здесь, предпросмотрите подстановку на репрезентативных сниппетах, потом вставьте провалидированный regex в проектный find/replace вашего редактора с уверенностью.
Проверить шаблон, найденный в интернете
Вставили regex со StackOverflow или из блога? Бросьте его во вкладку Explain — каждый токен будет аннотирован простым языком. Ловит тонкие проблемы (`.+?` там, где хотелось `.+`, пропущенные якоря `^`/`$`, случайно жадные квантификаторы) до того, как regex попадёт в код.
Научить regex коллегу по команде
Откройте вкладку Explain на рабочем шаблоне и пройдите по нему токен за токеном. Цветовая кодировка (escape / квантификатор / класс символов / группа / якорь / альтернация) позволяет обучающемуся увидеть структурную форму regex, а не только символы.
Портировать шаблон между языками
Есть regex из Python или PCRE, который нужно использовать в JavaScript? Вставьте его сюда. Если он распарсится, пояснитель покажет JS-эквивалентную семантику; если нет, ошибка парсера назовёт виновную конструкцию (атомные группы, поссессивные квантификаторы, встроенный `(?i)`), чтобы вы точно знали, что переписать.
Отладить медленный продакшен-regex
Если серверный regex подозревается в катастрофическом бэктрекинге, вставьте его в этот тестер с образцом ввода. Сторож «настенных часов» в 250мс срабатывает на патологических случаях, давая немедленный диагноз ещё до того, как вы потянулись за инструментами профилирования — а пояснитель указывает на вложенный квантификатор как корневую причину.

Заметки о движке и алгоритме

Движок RegExp ECMA-262 (нативный браузерный)
Использует `new RegExp(pattern, flags)` и движок, поставляющийся с V8 / JavaScriptCore / SpiderMonkey — ту же семантику regex, что вы получите в JavaScript где угодно. Шаблоны, валидирующиеся здесь, работают без изменений в Node.js, Deno, Bun и каждом современном браузере.
Итерация совпадений через String.matchAll
Глобальная итерация использует `text.matchAll(regex)`, а не ручной цикл по lastIndex, поэтому каждое совпадение несёт свои группы захвата, именованные группы и (с /d) индексы [start, end]. Нулевой ширины совпадения обрабатываются стандартным сдвигом lastIndex на +1, чтобы избежать бесконечных циклов.
Тайм-аут «настенных часов» для защиты от ReDoS
Бюджет 250 миллисекунд оборачивает каждый вызов match, replace и split. Движок всё ещё может бэктрекать внутри одной попытки совпадения, но внешняя итерация кооперирует с бюджетом — патологические шаблоны прерываются с `timedOut: true`, и UI выводит предупреждение вместо блокировки вкладки.
Переподмена шаблонов замены вручную
Вкладка Replace парсит $1..$N, $&, $`, $', $$ и $ вручную, а не делегирует `String.replace`, так что предпросмотр ведёт себя одинаково на разных движках (старее Safari, старее Node), где у шаблонов именованных групп есть крайние случаи. Вывод ровно тот, что выдают текущие движки JavaScript.
Токенайзер шаблона для пояснителя
Вкладка Explain запускает рукописный токенайзер, классифицирующий каждый фрагмент шаблона (escape / метасимвол / квантификатор / класс символов / открытие-группы / закрытие-группы / якорь / альтернация). Незнакомые конструкции проваливаются в `literal` с общим примечанием, так что пояснитель никогда не теряет содержимое молча.
Постоянные ссылки через хэш URL (никогда не передаются)
Состояние шеринга кодируется во фрагменте location.hash (`#p=…&f=…&t=…&tab=…`). Браузеры никогда не передают фрагмент в HTTP-запросах, поэтому серверы go-tools.org получают ноль данных при открытии постоянной ссылки. Гидратация происходит целиком на устройстве получателя.

Лучшие практики regex

Заякоривайте шаблоны, когда это намеренно
`^pattern$` совпадает с точной строкой; `pattern` совпадает где угодно. Неправильный выбор — самый частый баг в валидации форм: пропущенный `^` пропустит ведущий `attacker.com/` мимо проверки домена; пропущенный `$` пропустит концевой мусор. Используйте вкладку Match на намеренно сломанных образцах, чтобы подтвердить, что отвергается.
Предпочитайте не-захватывающие группы для чистой структуры
`(?:foo|bar)+` и `(foo|bar)+` функционально идентичны, но первый не выделяет группу захвата. Тянитесь к `(?:…)`, когда группа существует только под квантификатор или альтернацию — это сохраняет ваши нумерованные $1..$N стабильными и экономит крошечный объём работы движка.
Используйте флаг /u для всего, что выходит за ASCII
Без /u точка и `\w` трактуют символы из суррогатных пар (эмодзи, кодовые точки вне BMP) как две единицы UTF-16. С /u они — одна кодовая точка каждый — то, как их воспримут ваши пользователи. /u также включает `\p{Letter}` и другие escape-последовательности свойств. По умолчанию используйте /u для новых шаблонов, если у вас нет конкретной причины не делать этого.
Именуйте свои группы захвата
`(?\d{4})-(?\d{2})` самодокументирующийся. Через шесть месяцев, когда вы читаете regex обратно, `m.groups.year` очевидно год — `m[1]` нет. Шаблоны замен с $ переживают переупорядочивание групп: позиционные шаблоны ломаются в момент, когда кто-то добавляет ещё одну группу.
Тестируйте случаи провала, не только успеха
Тестер regex — для провалов. Подтвердите, с чем шаблон совпадает, потом намеренно мутируйте тестовый текст, чтобы увидеть, с чем не совпадает — ведущий пробел, концевой пробел, пропущенные части, лишние части, неверный регистр, смешанные письменности. Шаблоны, проходящие валидный ввод, но принимающие мусор — это баги, которые продакшен показывает первыми.

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

Передаётся ли мой regex или тестовый текст на ваш сервер?
Нет. Каждая операция — match, replace, split и explain — выполняется на JavaScript внутри вашего браузера на нативном движке RegExp. Ваш шаблон и текст не загружаются, не логируются, не сохраняются на диск и не отправляются третьим сторонам. В localStorage сохраняются только UI-настройки (активная вкладка и какие флаги вы обычно держите включёнными), чтобы страница помнила их при следующем визите — никогда не шаблон и не тестовый текст. Проверить можно, открыв DevTools → Network: ввод в любое поле не вызывает ни одного запроса. Это делает инструмент безопасным для проприетарных шаблонов, отредактированных образцов логов, внутренней конфигурации и всего того, что вы не вставили бы в regex101.
Какой диалект regex использует этот тестер — PCRE, Python, Java, JavaScript?
ECMA-262 (JavaScript), диалект, реализованный в V8, JavaScriptCore и SpiderMonkey — тот же движок, что и в `new RegExp(pattern, flags)` в любом браузере, Node.js, Deno или Bun. Это значит, что поддерживаются: группы захвата (нумерованные и именованные через `(?...)`), look-ahead `(?=...)` и `(?!...)`, look-behind `(?<=...)` и `(?...)`, поссессивных квантификаторов `a++`, условных конструкций `(?(1)yes|no)` и встроенных модификаторов `(?i)` выбросят синтаксическую ошибку. `re.VERBOSE` из Python здесь не поддерживается. Для regex Python/Java/Go портируйте шаблон обратно в нативный движок — большинство простых шаблонов переносится без изменений, а пояснитель здесь нейтрален относительно диалекта.
Что делает каждый из флагов g, i, m, s, u, y, d?
g (global) — находит каждое совпадение, а не только первое; требуется для итерации через .matchAll и для глобальной замены. i (case-insensitive) — A и a совпадают как одна буква. m (multiline) — ^ и $ цепляются к каждому переводу строки, а не только к началу/концу всего ввода. s (dotAll) — . совпадает и с переводами строк; без /s точка останавливается на \n. u (unicode) — включает escape-последовательности \u{HHHH}, escape-последовательности свойств Unicode (\p{Letter}) и трактует шаблон как последовательность кодовых точек Unicode вместо кодовых единиц UTF-16. y (sticky) — заякоривает каждое совпадение по lastIndex, полезно для токенайзеров. d (hasIndices, ES2022) — заполняет `.indices` и `.indices.groups` парами [start, end] для каждого захвата; этот тестер использует /d под капотом, чтобы рисовать границы групп. Переключайте их чипсами над тестовым текстом; канонический литерал /pattern/flags показан в индикаторе.
Как написать группы захвата и как на них ссылаться обратно?
Оберните подшаблон в скобки: `(\d{4})-(\d{2})-(\d{2})` даёт три позиционные группы, доступные как $1, $2, $3 в заменах или как m.groups[0..2] в панели Совпадений. Используйте `(?...)` для именованных групп: `(?\d{4})-(?\d{2})` позволит писать $/$ в шаблоне замены. Используйте `(?:...)` для не-захватывающей группы, когда группировка нужна только под квантификатор (`(?:foo|bar)+`) — она не создаёт обратной ссылки, что сохраняет ваши нумерованные $1..$N стабильными. Внутри того же шаблона ссылайтесь на предыдущий захват через `\1`, `\2` и т.д. — удобно для поиска удвоенных слов вроде `\b(\w+)\s+\1\b`.
Как работают look-ahead и look-behind и для чего они нужны?
Lookarounds — это утверждения нулевой ширины: они проверяют, что что-то совпадает (или нет), не потребляя символы. `(?=foo)` (позитивный look-ahead) успешен, если `foo` идёт после текущей позиции; `(?!foo)` (негативный look-ahead) успешен, если `foo` НЕ идёт после. `(?<=foo)` и `(?
Почему мой regex вешает браузер и что такое катастрофический бэктрекинг?
Катастрофический бэктрекинг случается, когда у шаблона вложенные квантификаторы по пересекающимся альтернативам — классическая форма `(a+)+`, `(a|aa)+`, `(\w*)*` или `(?:a|a?)+`. На вводе, где совпадение может провалиться на последнем символе, движок перебирает экспоненциальное число разбиений по группам, прежде чем сдаться. На `aaaaaaaaaaaaaaaaaaaaab` с шаблоном `(a+)+b` это 2^21 ≈ 2 миллиона бэктреков до ответа. Этот тестер оборачивает каждый вызов match в бюджет «настенных часов» на 250мс — если бюджет превышен, итерация останавливается и вы видите предупреждение «Шаблон превысил тайм-аут». Лечится так: заякорите шаблон по границам (`^...$`), предпочитайте непересекающиеся альтернативы (`(a|b)` вместо `(a|aa)`), разверните вложенные квантификаторы (`a+` вместо `(a+)+`) или перепишите через поссессивно-подобные идиомы (`(?=(a+))\1` имитирует `a++` в JS).
Чем этот тестер regex отличается от regex101.com?
Три отличия. (1) Конфиденциальность: regex101 отправляет каждое нажатие на сервер для бэкенд-оценки и хранит шаблоны в общедоступных ссылках; этот инструмент работает полностью в вашем браузере, без сетевых вызовов. (2) Скорость: серверный roundtrip на каждое изменение добавляет 80-300мс; здесь совпадения обновляются менее чем за 10мс даже на длинном тексте. (3) Фокус по диалекту: regex101 поддерживает PCRE, Python, Java, .NET, JavaScript, Rust и Go с UI флагов фич; этот инструмент сфокусирован на ECMA-262 (JavaScript) — диалекте, который поставляется с каждым браузером, Node, Deno и Bun, — а пояснитель и постоянные ссылки подстроены под этот единственный диалект. Если вам нужны PCRE-специфичные фичи, regex101 всё ещё правильный инструмент; для работы на JavaScript / TypeScript этот быстрее и приватнее. Постоянные ссылки здесь — это URL-хэши (без загрузки), поэтому общая ссылка воспроизводит ваш шаблон локально на машине получателя.
Как экранировать спецсимволы вроде . | ( ) [ ] { } * + ? ^ $ \?
Поставьте перед ними обратный слэш: `\.`, `\|`, `\(`, `\)`, `\[`, `\]`, `\{`, `\}`, `\*`, `\+`, `\?`, `\^`, `\$`, `\\`. Прямой слэш `/` не нуждается в экранировании в строковом шаблоне (только в JS regex-литералах между слэшами). Внутри класса символов `[...]` большинство метасимволов теряет специальное значение, поэтому `[.]`, `[*]`, `[+]` все совпадают с литеральным символом — особыми остаются только `]`, `\`, `^` (только в начале — для отрицания) и `-` (диапазон между двумя символами). Если сомневаетесь, вставьте литеральный текст в шаблон и запустите пояснитель: каждая escape-последовательность получит однострочное описание в панели разбора.
Можно ли поделиться regex с коллегой по ссылке?
Да — и в ссылке нет серверного roundtrip. Нажмите «Скопировать ссылку» в панели действий: тестер закодирует ваш шаблон, флаги, тестовый текст и активную вкладку в хэш URL (`#p=...&f=gim&t=...&tab=match`). Любой, кто откроет ссылку, гидратирует страницу с тем же состоянием — локально на своей машине. Поскольку данные живут во фрагменте хэша, они никогда не отправляются на сервер go-tools.org (браузеры не передают фрагменты в запросах) и не логируются в наших журналах доступа. Длина ссылки растёт вместе с размером текста, поэтому для образцов >2КБ копируйте regex через «Скопировать /pattern/flags» и вставляйте текст отдельно. Для совместного review regex без передачи самого текста делитесь только шаблоном и флагами — получатель вставит свой корпус и получит те же совпадения.
Поддерживает ли тестер Unicode, эмодзи и нелатинские письменности?
Да. Включите флаг /u, чтобы перейти на полную обработку Unicode: \w совпадает с латинскими word-символами (семантика по умолчанию), но с /u можно совпадать с более широкими категориями через escape-последовательности свойств Unicode — `\p{Letter}` совпадает с каждой буквой в каждой письменности, `\p{Script=Han}` совпадает с китайскими иероглифами, `\p{Emoji}` совпадает с эмодзи, `\p{Number}` совпадает с каждой цифрой/числом. Без /u эмодзи из суррогатных пар вроде 👨‍💻 видятся как две кодовые единицы UTF-16 и шаблоны вроде `^.$` не смогут с ними совпасть; с /u точка трактует каждую кодовую точку графемы как один символ. Для RTL-письменностей (арабский, иврит) шаблоны работают без специальной обработки — направление это забота уровня отрисовки, а не движка regex. CJK-контент совпадает так же, как латиница.
В чём разница между .match, .matchAll, .replace и .split с regex?
String.prototype.match возвращает первое совпадение (или массив всех при включённом /g), но теряет группы захвата при /g. String.prototype.matchAll требует /g и возвращает итератор массивов совпадений С группами захвата и индексами — это то, что использует этот тестер внутри. String.prototype.replace принимает либо строковый шаблон ($1, $& и т.д.), либо callback, вызываемый для каждого совпадения с (match, ...groups, offset, string, namedGroups). String.prototype.split разбивает по каждому совпадению — полезен с /g, но глобальный флаг игнорируется для семантики split. Этот инструмент выставляет match через вкладку Match, replace через Replace и split через Split, чтобы вы могли предпросмотреть каждый вариант, не покидая страницу; литерал /pattern/flags — в одном клике, когда вы готовы вставить в код.
Почему мой regex из Python или Java не работает здесь?
Потому что этот тестер запускает ECMA-262 (JavaScript) — большинство шаблонов переносится чисто, горстка нет. Типичные подводные камни порта: (1) Встроенные флаги Python `(?i)` и `(?x)` не валидны в JS — используйте чипсы флагов сверху. (2) `\A` и `\Z` из Python — это `^` и `$` в JS (с /m для строчных якорей). (3) Условные конструкции Java/Python `(?(name)yes|no)` не поддерживаются в JS — перепишите альтернацией. (4) Поссессивные квантификаторы `a++` и атомные группы `(?>...)` недоступны в JS — имитируйте через `(?=(a+))\1`. (5) `(?P...)` из Python — это `(?...)` в JS. (6) `\h` для горизонтального пробела и `\v` для вертикального не в JS — используйте `[ \t]` и `[\n\r]`. Для портируемого переноса пояснитель разбирает, что делает каждый токен, чтобы вы могли заменить неподдерживаемый синтаксис эквивалентом.
Есть ли максимальный размер текста или число совпадений?
Практический предел: около 200 000 символов тестового текста и 500 подсвеченных совпадений, отображаемых одновременно. Свыше 500 совпадений панель Совпадений показывает баннер «Показаны первые 500»; бейдж счётчика всё равно сообщает истинный итог. Бюджет «настенных часов» в 250мс ограничивает разогнавшиеся шаблоны независимо от размера. Для многомегабайтных логов запускайте regex командной строкой `grep -oE` или `rg` (ripgrep) — они потоковые и не упрутся в потолок отрисовки UI. Для разовых сканов огромного текста вставьте репрезентативный кусок в этот тестер, чтобы провалидировать шаблон, потом запустите провалидированный шаблон по всему файлу в шелле.

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

Все инструменты →

Сравнение текста и Diff

Работа с текстом

Сравните два текста мгновенно в браузере. Просмотр бок о бок, подсветка слов, экспорт unified diff, опции игнорирования регистра/пробелов/пустых строк. 100 % в браузере — без загрузки.

Бесплатный счётчик слов и символов

Работа с текстом

Подсчитывайте слова, символы, предложения, абзацы и время чтения мгновенно. Счётчик слов в реальном времени с проверкой лимитов Twitter, meta description и Instagram. Бесплатно, приватно, без регистрации.

Конвертер систем счисления — bin, hex, dec, oct

Конвертеры

Конвертация между системами счисления — двоичной, hex, десятичной, восьмеричной и любой базой 2-36 мгновенно. Бесплатно, приватно — вся обработка в браузере.

Base64 декодер и кодировщик

Кодирование и форматирование

Декодирование и кодирование Base64 онлайн бесплатно. Преобразование в реальном времени с полной поддержкой UTF-8 и эмодзи. Полная приватность — работает в браузере. Без регистрации.

Генератор crontab и конструктор cron-выражений

Дата и время

Создавайте, проверяйте и расшифровывайте cron-выражения в браузере. Предпросмотр запусков в локальном времени или UTC. POSIX 5 полей, пресеты, описание простым языком. Бесплатно и приватно.

Конвертер CSV в JSON

Кодирование и форматирование

Конвертируйте CSV в JSON в браузере. RFC 4180, определение типов, заголовок, безопасность больших целых. 100% приватно, без загрузки.