TanodTools
RU

Проверка регулярных выражений

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

Работает полностью в браузере

Флаги

Совпадения в тексте

  
№ПозицияСовпадениеГруппы

Синтаксис регулярных выражений JavaScript (ECMAScript) в том виде, в каком его поддерживает ваш браузер. Текст до 5 МБ; перечисляются и подсвечиваются первые 1 000 совпадений. Выражение, которое выполняется дольше 2 секунд, останавливается.

Как проверить регулярное выражение

  1. Введите шаблон между косыми чертами и отметьте нужные флаги, например g для всех совпадений или i, чтобы не учитывать регистр.
  2. Вставьте тестовый текст. Совпадения подсвечиваются при вводе, а в таблице перечислены все совпадения с их позицией и группами захвата.
  3. Чтобы проверить подстановку, введите замену, например $2-$1 или $<year>, и прочитайте результат под ней.

Безопасная проверка шаблонов

Инструмент строит из вашего шаблона и флагов объект RegExp JavaScript и выполняет его в фоновом потоке, тем же движком, который будет использовать ваш код в этом браузере. Совпадения возвращаются с начальной позицией и всеми группами захвата, а страница рисует их поверх вашего текста с чередующейся подсветкой, чтобы соседние совпадения можно было различить. Пустое совпадение, которое могут дать, например, \b или a*, показывается тонкой чертой.

Выполнение шаблона в отдельном потоке важно, потому что регулярное выражение может работать экспоненциально долго. Если шаблон всё ещё выполняется через 2 секунды, поток останавливается, и вы получаете сообщение вместо зависшей вкладки. Та же защита работает и в инструменте Поиск и замена.

Позиции считаются в кодовых единицах UTF-16, как считаются строки в JavaScript: эмодзи или другой символ за пределами основной плоскости занимает две. В списке показаны первые 1 000 совпадений; общее число над ним учитывает все совпадения.

Советы

Вопросы и ответы

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

JavaScript, который выполняет движок вашего собственного браузера, поэтому результаты в точности такие, какие даёт RegExp в вашем браузере или в Node.js. Большая часть повседневного синтаксиса общая с PCRE, Python и Java, но некоторые возможности различаются: притяжательные квантификаторы и атомарные группы не поддерживаются, а ретроспективные проверки, именованные группы и флаг v требуют современного браузера.

Почему показано только одно совпадение?

Без флага g (глобальный) регулярное выражение JavaScript находит только первое совпадение, а замена меняет только первое вхождение. Отметьте g, чтобы найти все. Инструмент в точности следует языку, поэтому то, что вы видите, — это то, что сделает ваш код.

Что делают флаги?

g находит все совпадения, i не учитывает регистр, m заставляет ^ и $ срабатывать на границах строк, s позволяет . совпадать с переводами строк, u включает полную обработку Unicode, v — более новый режим Unicode с операциями над множествами, y (sticky) совпадает только в текущей позиции, а d записывает начало каждой группы, что инструмент и так использует для позиций групп.

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

$1, $2 и так далее вставляют нумерованные группы, $<name> вставляет именованную группу, $& вставляет всё совпадение целиком, $` и $' вставляют текст до него и после него, а $$ записывает знак доллара как есть.

Почему шаблон остановился с сообщением «выполнялся слишком долго»?

Некоторые шаблоны, например ^(a+)+$ на длинной цепочке букв a, которая заканчивается не так, как ожидается, заставляют движок перебирать огромное число способов совпадения. Это называется катастрофическим возвратом. Инструмент выполняет каждый шаблон в фоновом потоке и останавливает его через 2 секунды, чтобы страница оставалась пригодной для работы. Перепишите вложенные повторы вида (a+)+ как a+.

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

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