tools / regex
regex/
Проверка регулярных выражений JavaScript в реальном времени: подсветка совпадений, список групп захвата, предпросмотр замены.
Тестовый текст
Подсветка совпадений
Список совпадений
| # | Позиция | Совпадение | Группы |
|---|
Замена
Частые вопросы
Какой движок регулярных выражений здесь используется и совпадает ли он с Python и PCRE?
Используется встроенный в браузер движок регулярных выражений JavaScript, поэтому синтаксис немного отличается от Python, PCRE и Java. Например, именованные группы пишутся как (?<name>...), а не (?P<name>...), как в Python; встроенные флаги вроде (?i) в начале не поддерживаются, вместо этого отметьте флаг i; притяжательных квантификаторов и атомарных групп тоже нет. Работает ли более новый синтаксис, например lookbehind, зависит от вашего браузера.
Почему не срабатывает регулярное выражение, скопированное из кода?
Скорее всего, вместе с ним скопированы слэши по краям, флаги в конце или экранирующие обратные косые черты. В поле вводите только то, что стоит между двумя слэшами, а флаги вроде g и i отмечайте справа. Если вы копировали из строки JavaScript, замените \\d+ на \d+: в поле обратные косые черты второй раз экранировать не нужно.
Почему находится только одно совпадение или . и ^ $ работают не так, как ожидается?
Сначала проверьте флаги справа от поля. Без g берется только первое совпадение, и в заголовке списка об этом написано. Точка не совпадает с переводом строки, пока не отмечен s; ^ и $ по умолчанию соответствуют только началу и концу всего текста, а для поиска по строкам отметьте m. y — режим sticky: совпадения должны начинаться с начала и идти друг за другом без промежутков, поэтому он нужен редко.
Что делать, если появляется сообщение «Поиск шел дольше 1.5 с и был остановлен»?
Это значит, что на вашем тексте выражение слишком много раз откатывается и его нужно переписать. Типичный пример — вложенный квантификатор вроде (a+)+: на длинном тексте, который не удается сопоставить, время работы растет в разы. Страница запускает регулярное выражение в фоновом потоке и останавливает его через 1,5 секунды, поэтому сама страница не зависает. Обычно помогает указать квантификаторы конкретнее, убрать вложенность или использовать более узкий диапазон символов.
Что будет, если совпадений очень много или текст очень длинный?
В подсветке и списке показываются не более первых 1000 совпадений, а если их больше, выводится сообщение; на результат замены это ограничение не влияет. Если текст длиннее 200 000 символов, страница ждет примерно 0,4 секунды после окончания ввода и только потом пересчитывает. Других ограничений на длину нет, поэтому скорость в основном зависит от самого выражения.
Как записать шаблон замены?
Используется синтаксис замены JavaScript: $1 и $2 — группы захвата по номеру, $<name> — именованная группа, $& — все совпадение целиком, $$ — буквальный знак доллара. Пустой шаблон удаляет найденное. Без флага g заменяется только первое совпадение.
Можно ли использовать встроенные шаблоны для номера телефона, удостоверения личности и т. п. для проверки как есть?
Только как отправную точку, а не строгую проверку. Шаблон телефона принимает 11 цифр, начинающихся с 1, при этом вторая цифра от 3 до 9; коды стран не обрабатываются. Шаблон удостоверения личности проверяет только формат из 18 символов: день от 01 до 31 допускается для любого месяца, последняя контрольная цифра не проверяется, код региона не сверяется с реальными регионами. Шаблоны электронной почты и URL охватывают только распространенные формы, причем URL принимает только http и https. При выборе шаблона выражение в поле заменяется, а флаги сбрасываются так, что остается только g.
Отправляется ли введенный текст на сервер?
Нет. Регулярное выражение выполняется в фоновом потоке браузера, тестовый текст, выражение и шаблон замены на сервер не отправляются, а сама страница ваш ввод не сохраняет.