Тестер регулярных выражений
Введите шаблон, отметьте нужные флаги и вставьте текст: каждое совпадение подсвечивается прямо при вводе и выводится в списке с позицией и группами захвата. Шаблон выполняется встроенным движком регулярных выражений JavaScript вашего браузера, поэтому результаты совпадают с поведением вашего кода, а текст остается на вашем устройстве.
Символов: 0 · слов: 0 · строк: 0
Здесь будут подсвечены совпадения.Символов: 0 · слов: 0 · строк: 0
Всё работает в этой вкладке браузера. Ваш текст никуда не загружается и не сохраняется.
Токены регулярных выражений JavaScript
Столбец первого совпадения получен запуском каждого шаблона на его тексте движком JavaScript, который собирал эту страницу.
| Токен | Значение | Шаблон | Текст | Первое совпадение |
|---|---|---|---|---|
\d | Цифра 0–9 | /\d+/ | Order 66 shipped | 66 |
\w | Буква, цифра или подчёркивание (ASCII) | /\w+/ | snake_case-id | snake_case |
\s | Пробельный символ, включая табуляцию и переносы строк | /\s+/ | two spaces | |
. | Любой символ, кроме переноса строки (если нет s) | /a.c/ | abc a-c | abc |
^ $ | Начало и конец ввода (или строки, с флагом m) | /^\w+$/ | single | single |
[abc] | Один из перечисленных символов | /[aeiou]/ | rhythm and blues | a |
[^abc] | Любой символ, кроме перечисленных | /[^0-9]+/ | 2026-10-18 | - |
* + ? | 0 или больше, 1 или больше, 0 или 1 | /colou?r/ | color colour | color |
{n,m} | От n до m раз | /\d{2,4}/ | 7 42 1999 123456 | 42 |
(…) | Захватывающая группа | /(\d+)px/ | width: 320px | 320px |
(?<name>…) | Именованная захватывающая группа | /(?<h>\d\d):(?<m>\d\d)/ | at 09:45 | 09:45 |
(?:…) | Группа без захвата | /(?:ab)+/ | ababab! | ababab |
a|b | Одна из сторон | /cat|dog/ | hotdog | dog |
\b | Граница слова | /\bcat\b/ | concat cat | cat |
(?=…) | За которым следует (опережающая проверка) | /\d+(?=%)/ | 50 of 75% | 75 |
(?<!…) | Перед которым нет (негативная ретроспективная проверка) | /(?<!\$)\b\d+/ | $30 or 40 | 40 |
\p{L} | Любая буква Unicode (нужен u) | /\p{L}+/u | naïve 東京 | naïve |
Шесть флагов и что они меняют
g (global) находит все совпадения, а не останавливается на первом; без него в списке будет одна запись. i игнорирует регистр. m (multiline) заставляет ^ и $ срабатывать в начале и конце каждой строки, а не только всего текста, что нужно для шаблона вроде пробелов в конце строки. s (dotAll, добавлен в ES2018) позволяет . совпадать и с переводами строк. u (unicode) обрабатывает текст как кодовые точки, поэтому эмодзи считается одним символом, и включает свойства вроде \p{L} для любой буквы в любом письме. y (sticky) совпадает строго в текущей позиции, этот режим используют токенизаторы. В JavaScript есть также d для индексов совпадений и v для операций над множествами в классах; этот тестер ограничивается шестью флагами выше.
Под тестовым текстом для каждого совпадения показаны его индекс и группы. Нумерованные группы создаются обычными скобками, (?:…) группирует без захвата, а (?<year>\d{4}) создаёт именованную группу, которая отображается по имени, как показывает пример с датой ISO. Меню Common patterns вставляет проверенные заготовки для адресов электронной почты, URL, адресов IPv4, hex-цветов, UUID, повторяющихся слов и пробелов в конце строки. Шаблон для email стоит считать быстрой проверкой, а не валидацией: полная грамматика адреса намного шире, и настоящая проверка — отправка письма.
Ретроспективная проверка и катастрофический возврат
Lookaround проверяют, что находится вокруг позиции, не захватывая это. Lookahead, (?=…) и (?!…), есть в JavaScript всегда; lookbehind, (?<=…) и (?<!…), появился в ES2018 и стал доступен во всех основных браузерах, когда Safari 16.4 добавил его в 2023 году. Так, (?<=\$)\d+ находит 42 в «$42», не включая знак доллара. В отличие от многих других движков, JavaScript допускает lookbehind любой длины.
Движок JavaScript использует перебор с возвратами: когда путь не удаётся, он возвращается и пробует альтернативы. Вложенные квантификаторы вроде (a+)+$ дают экспоненциальное число способов разбить один и тот же текст, поэтому строка из 30 букв a с последующей x может обрабатываться секундами, а ещё несколько букв — часами. Это катастрофический возврат, а на серверах — ReDoS, отказ в обслуживании; одно правило WAF с таким дефектом 2 июля 2019 года остановило сеть Cloudflare примерно на полчаса. Поскольку этот тестер работает в вашей вкладке, такой шаблон может зависнуть страницу; перезагрузите её и перепишите шаблон так, чтобы два квантификатора не могли занимать одни и те же символы: используйте более точные классы вроде [^,]* вместо .* или якоря. Для правки самого текста, а не поиска по нему, см. инструменты для текста; другие утилиты для разработчиков собраны в разделе инструменты для разработчиков.
Часто задаваемые вопросы
- Почему регулярное выражение находит только одно совпадение?
- Флаг g выключен. Без него движок останавливается после первого совпадения. Включите g, чтобы увидеть все вхождения; один флаг y тоже находит несколько совпадений, но только если они идут подряд.
- Совпадает ли \d в JavaScript с цифрами других письменностей?
- Нет. В JavaScript \d означает только 0–9, а \w — только латинские буквы ASCII, цифры и подчёркивание, даже с флагом u. Для других письменностей используйте \p{Nd} или \p{L} вместе с u.
- Будет ли проверенный здесь шаблон работать так же в Python или PHP?
- Базовый синтаксис переносится, но детали отличаются: именованные группы в Python записываются как
(?P<name>…), PHP и Python поддерживают притяжательные квантификаторы, которых нет в JavaScript, а правила lookbehind различаются. Проверьте шаблон заново в нужном движке. - Как найти обычную точку или скобку?
- Экранируйте его обратной косой чертой:
\.совпадает с точкой, а\[— с открывающей квадратной скобкой. Внутри символьного класса большинство символов и так буквальные, поэтому[.]тоже совпадает только с точкой. - Почему страница зависла, пока я вводил шаблон?
- Вероятно, шаблон вызвал катастрофический возврат на вашем тексте. Перезагрузите страницу, затем избегайте вложенных квантификаторов вроде
(.*)*или(a+)+и делайте так, чтобы каждая часть совпадала с минимумом символов.