Как пользоваться
Введите регулярное выражение без косых черт и вставьте текст. Тестер сразу:
- подсветит все совпадения в тексте (соседние — разными цветами, пустые — тонкой чертой);
- покажет их число и таблицу: позиция каждого совпадения (с нуля, как
indexв JavaScript) и значения групп — номер, имя для именованных и—, если группа не участвовала; - с включённой заменой — результат
text.replace(regex, замена), который можно скопировать.
Работает настоящий движок регулярных выражений вашего браузера, поэтому результат совпадает с тем, что даст ваш код на JavaScript или TypeScript. Без флага g находится только первое совпадение — так же, как у match и replace. Показываются первые 1000 совпадений.
Текст обрабатывается в браузере и никуда не отправляется.
Флаги
| Флаг | Что делает |
|---|---|
g |
ищет все совпадения, а не только первое |
i |
не различает заглавные и строчные буквы |
m |
^ и $ срабатывают в начале и конце каждой строки, а не всего текста |
s |
точка . совпадает и с переносом строки |
u |
режим Юникода: классы \p{…}, символы за пределами BMP (эмодзи) как один символ, строгий синтаксис |
y |
«липкий» поиск: совпадение должно начинаться ровно там, где закончилось предыдущее |
Краткая шпаргалка
| Шаблон | Значение |
|---|---|
. |
любой символ, кроме переноса строки |
\d, \w, \s |
цифра, латинская буква/цифра/_, пробельный символ |
\D, \W, \S |
всё, кроме перечисленного выше |
[абв], [^0-9] |
один из символов; любой, кроме цифр |
*, +, ? |
0 и больше, 1 и больше, 0 или 1 раз |
{2,5} |
от 2 до 5 раз |
*?, +? |
«ленивые» версии: как можно меньше символов |
^, $, \b |
начало, конец, граница слова |
(…), (?<имя>…), (?:…) |
группа, именованная группа, группа без запоминания |
a|b |
a или b |
(?=…), (?!…) |
дальше идёт / не идёт … |
(?<=…), (?<!…) |
перед этим стоит / не стоит … |
\p{L} |
любая буква любого алфавита (только с флагом u) |
Примеры
Числа в тексте. \d+ с флагом g в строке «Заказ 15 на 3 400 ₽» найдёт три совпадения: 15, 3 и 400 — пробел-разделитель разрядов разрывает число.
Повтор слова. (\p{L}+)\s+\1 с флагами giu найдёт «Это это» в «Это это пример, пример»: \1 — ссылка на текст первой группы. Второй повтор не найдётся из-за запятой.
Лишние пробелы. Шаблон \s{2,}, флаг g, замена — один пробел: «слишком много пробелов» → «слишком много пробелов».
Перестановка через именованные группы. Шаблон (?<first>\p{L}+) (?<last>\p{L}+) с флагом u и замена $<last> $<first> превращают «Иван Петров» в «Петров Иван».
Строка замены
$1,$2… — текст группы по номеру;$<имя>— текст именованной группы;$&— всё совпадение;$`и$'— текст до и после совпадения;$$— сам знак доллара.
Например, шаблон (\d+)-(\d+)-(\d+) с заменой $3.$2.$1 превращает 2026-03-15 в 15.03.2026.
Частые вопросы
Почему \w и \b не работают с русскими словами? В JavaScript \w — это только [A-Za-z0-9_], а \b — граница между такими символами. Для кириллицы используйте \p{L} (любая буква) или [а-яё] с флагом i; для \p{L} нужен флаг u.
Почему без флага g находится только одно совпадение? Так работает JavaScript: str.match(re) и str.replace(re, …) без g обрабатывают только первое совпадение. Тестер повторяет это поведение, чтобы результат совпадал с вашим кодом.
Страница написала, что расчёт остановлен. Что это значит? Некоторые выражения, например (a+)+$, на неподходящей строке перебирают варианты экспоненциально долго — это называется катастрофическим перебором (ReDoS). Тестер считает в отдельном потоке и останавливает его через 2 секунды, чтобы страница не зависла. В рабочем коде такое выражение стоит переписать: убрать вложенные квантификаторы.
Подойдёт ли это для регулярных выражений Python, PHP или Java? Базовый синтаксис общий, но есть различия: в JavaScript нет притяжательных квантификаторов a++ и атомарных групп, флаги задаются иначе, а у Python именованная группа пишется (?P<имя>…). Простые выражения работают одинаково.
Разбить текст на строки и убрать дубли можно в обработке списка строк, а сравнить два варианта текста — в сравнении текстов.