Как пользоваться
- Введите шаблон в поле Шаблон без косых черт. Пример находит даты вида 2026-11-10.
- Отметьте нужные флаги. g находит все совпадения, i не различает заглавные и строчные буквы, а m и s меняют то, как читаются переводы строк.
- Вставьте тестовый текст в поле Тестовый текст. Совпадения сразу подсвечиваются, а список под текстом показывает позицию и группы каждого.
- Введите текст в поле Заменить на, чтобы увидеть результат, затем нажмите Копировать, чтобы его взять.
Как здесь выполняется поиск
Страница использует движок регулярных выражений, встроенный в ваш браузер, то есть тот же, что и JavaScript. Совпадения ищутся по порядку, от начала текста. Позиция — это число символов до совпадения, начиная с 0; считается она в единицах UTF-16, как считает JavaScript.
Поиск идёт в фоновом процессе браузера, поэтому страница остаётся отзывчивой. Поиск останавливается после 10 000 совпадений, а текст длиннее 200 000 символов не ищется. Шаблон, который может совпасть с пустым местом, например x*, после каждого пустого совпадения сдвигается на один символ, поэтому поиск всегда заканчивается. Поиск, который длится дольше двух секунд, останавливается; см. раздел о катастрофическом откате.
- Без флага g показывается только первое совпадение, как в String.match().
- Флаг u читает эмодзи и любой другой символ за пределами базовой многоязычной плоскости как один символ.
- Флаг d добавляет в список начало и конец каждой группы.
Катастрофический откат и ограничение в две секунды
Движок регулярных выражений перебирает способы, которыми шаблон может совпасть, один за другим. У некоторых шаблонов, главным образом у повторяемой группы внутри другой повторяемой группы, например (a+)+, число способов растёт очень быстро: каждый дополнительный символ может удвоить работу. Это чаще всего случается, когда текст почти совпадает и не совпадает только в самом конце.
Например, шаблон (a+)+$ на тексте из многих букв a и следующего за ними восклицательного знака не может совпасть, потому что $ требует конца текста. Движок всё равно перебирает каждый способ разбить буквы перед ним, прежде чем сдаться. При примерно 26 буквах поиск на обычном компьютере может занять секунду и больше, а каждая следующая буква замедляет его сильнее. Время зависит от устройства.
Эта страница выполняет каждый поиск в фоновом процессе и останавливает его через две секунды, показывая сообщение. Остальная часть страницы продолжает работать, так что можно изменить шаблон или текст и попробовать снова.
- Не ставьте повтор внутрь другого повтора над теми же символами: пишите (a+)$ вместо (a+)+$. На том же тексте безопасный шаблон заканчивается сразу.
- Будьте точны: используйте [a-z] или \d+ внутри группы вместо точки, чтобы части совпадения не могли перекрываться множеством способов.
- Сначала проверьте шаблон на коротком фрагменте текста, а потом на полном тексте.
- Привязывайте шаблон там, где это возможно: ^ в начале и $ в конце не дают движку пробовать каждую начальную позицию.
Шаблоны замены
Текст замены следует правилам String.replace() в JavaScript. Знак доллара начинает запись, которая заменяется совпавшим текстом:
| Вы пишете | На это заменяется |
|---|---|
| $1, $2 и так далее | Текст пронумерованной группы |
| $& | Всё совпадение |
| $` | Текст перед совпадением |
| $' | Текст после совпадения |
| $$ | Один знак доллара |
| Знак доллара, знак «меньше», имя группы и знак «больше» | Текст именованной группы |
Отличия от PCRE и .NET
Шаблон, написанный для PCRE (PHP, многие утилиты Linux) или для .NET (C#, Visual Basic), обычно работает и здесь, но некоторые возможности есть только в одном из движков. В таблице перечислены самые важные из них.
| Возможность | JavaScript (эта страница) | PCRE и .NET |
|---|---|---|
| Атомарные группы и притяжательные квантификаторы | Нет | Атомарные группы в PCRE и .NET; притяжательные квантификаторы, например a++, в PCRE |
| Якоря \A, \Z и \z | Нет: используйте ^ и $ | Есть |
| Именованная группа в записи (?P<…>) | Нет | Есть в PCRE |
| Встроенный параметр, например (?i) внутри шаблона | Нет: задайте флаг | Есть в .NET |
| Исключение текста из совпадения с помощью \K | Нет | Есть в PCRE |
| Замена именованной группы | Знак доллара, знак «меньше», имя, знак «больше» | В .NET: знак доллара, фигурная скобка, имя, фигурная скобка |
Пример: три даты в одном тексте
Пример шаблона содержит три именованные группы: четыре цифры года, две цифры месяца и две цифры дня, разделённые дефисами. В тексте три даты; они совпадают с позициями 14, 34 и 50, если отсчитывать от 0 у первой буквы.
Если заменить на день, месяц и год, записав три имени групп (знак доллара и имя каждой группы между знаками «меньше» и «больше»), три даты переписываются как 10.11.2026, 03.12.2026 и 15.01.2027. Текст примера на английском языке, как и в самой проверке: «Invoice dated 10.11.2026, paid on 03.12.2026. Due 15.01.2027.»
Частые вопросы
Какой диалект регулярных выражений использует эта проверка?
Движок JavaScript, встроенный в ваш браузер. Большинство шаблонов для поиска, проверки и очистки текста работают одинаково в JavaScript, PCRE и .NET, но несколько возможностей различаются, как перечислено в разделе об отличиях.
Почему список останавливается на 10 000 совпадений?
Совпадения собираются по порядку. Очень длинный список медленно рисовать и трудно читать, поэтому, когда шаблон совпадает чаще, показываются первые 10 000 совпадений, а страница сообщает, что поиск остановлен.
Почему текст не принимается, если он длиннее 200 000 символов?
Очень длинный текст замедляет страницу, а шаблон на нём может работать долго. Сначала проверьте шаблон на части текста, затем на остальном, или разрежьте текст на более короткие куски.
Почему подсветка пропускает некоторые совпадения?
Совпадение без символов, например пустое место между буквами, которое находит x*, подсвечивать нечем. Оно остаётся в списке с позицией, поэтому его место всё равно видно.
Проверка отправляет мой текст на сервер?
Нет. Поиск выполняется в вашем браузере, страница не хранит введённое и никуда его не отправляет. Закрытие страницы очищает его.
Что означает сообщение о недопустимом шаблоне?
Шаблон не читается как регулярное выражение JavaScript. Сообщение приходит от движка на английском языке и называет проблему, например скобку, которая не закрыта.
Можно ли проверить здесь шаблон, написанный для PCRE или .NET?
Часто да, если он использует только распространённые возможности. Если в нём есть атомарная группа, притяжательный квантификатор, \A или \z либо встроенный параметр, сначала перепишите эту часть для JavaScript; таблица показывает, какие это возможности.
Почему страница пишет, что шаблон работал слишком долго?
Поиск не завершился за две секунды на этом тексте, поэтому страница его остановила. Обычно это значит, что шаблон содержит повтор внутри другого повтора, например (a+)+, а текст почти совпадает. В разделе о катастрофическом откате показана более безопасная запись.
Источники
- MDN: регулярные выражения в JavaScript, флаги и группы (на английском)
- MDN: String.prototype.replace(), шаблоны замены (на английском)
- PCRE2: синтаксис шаблонов, документация PCRE (на английском)
- Microsoft: краткий справочник по языку регулярных выражений .NET (на английском)
Цифры и текст в последний раз проверены вторник, 10 ноября 2026 г..