Перейти к содержимому
LeedyBox
Поддержать

Тестер RegEx, замена и шпаргалка

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

Флаги
Совпадения: 0

Подробности совпадений и группы

Шпаргалка

Нажмите на шаблон, чтобы загрузить его вместе с примером текста.

Справка по синтаксису

Символы

.Любой символ, кроме перевода строки (с флагом s — включая его)
\d \DЦифра 0–9 / не цифра
\w \WСимвол слова (A–Z, a–z, 0–9, _) / не символ слова
\s \SПробельный символ / непробельный символ
[abc] [^abc]Один из a, b, c / любой, кроме a, b, c
[a-z]Символ в диапазоне от a до z
\p{L}Буква любого языка (нужен флаг u)
\. \\ \(Экранирование специального символа для поиска как есть

Квантификаторы

* + ?0 или больше / 1 или больше / 0 или 1
{n} {n,} {n,m}Ровно n / n или больше / от n до m
*? +? {n,m}?Ленивый: как можно меньше символов

Якоря

^ $Начало / конец текста (каждой строки с флагом m)
\b \BГраница слова / не граница слова

Группы и проверки

(…)Захватывающая группа, используется как $1, $2 …
(?:…)Группа без захвата
(?<name>…)Именованная группа, используется как $<name>
\1 \k<name>Обратная ссылка: тот же текст, что захватила группа
a|ba или b
(?=…) (?!…)За которым следует / не следует
(?<=…) (?<!…)Перед которым есть / нет

Замена

$1 $<name>Текст нумерованной или именованной группы
$& $$Всё совпадение / символ $

Проверяйте результаты перед использованием. Инструмент предоставляется «как есть», без гарантий, и результаты могут быть неполными или неверными. Условия использования

Шаблоны проверяются движком регулярных выражений JavaScript. Синтаксис и поведение могут отличаться в других языках и базах данных. Шаблоны из шпаргалки — практические примеры, а не полноценные валидаторы.

Как пользоваться

  1. Введите шаблон в поле «Регулярное выражение» без обрамляющих косых черт и флагов, а текст вставьте в поле «Тестовая строка». Совпадения подсвечиваются в блоке «Совпадения» и подсчитываются по мере ввода. Чтобы начать с примера, нажмите на шаблон в разделе «Шпаргалка»; при этом текущий шаблон, флаги, тестовая строка и параметры замены будут заменены.
  2. Отметьте нужные флаги в разделе «Флаги»; наведите указатель на букву, чтобы увидеть, что делает флаг. При открытии страницы включены g и u. Без g находится и заменяется только первое совпадение.
  3. Изучите блок «Подробности совпадений и группы»: в нём каждое совпадение указано вместе с позицией и текстом каждой группы в виде $1, $2 и т. д., а у именованных групп — с их именами. Включите флаг d, чтобы также видеть, где начинается и заканчивается каждая группа.
  4. Чтобы проверить замену, отметьте «Заменить совпадения на» и введите текст замены, используя $1 или $<name> для групп. Изменённый текст появляется в блоке «Результат замены», а кнопка «Копировать результат» копирует его.
  5. В разделе «Генератор кода» выберите JavaScript, Python, Java, PHP, Go или C# и нажмите «Копировать код». Если отмечено «Заменить совпадения на», фрагмент кода включает и замену. Кнопка «Копировать как /шаблон/флаги» копирует шаблон в виде литерала регулярного выражения JavaScript.

Частые вопросы

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

Нет. Шаблон и тестовая строка сопоставляются в вашем браузере его собственным движком регулярных выражений JavaScript и не отправляются в LeedyBox. Инструмент их также не сохраняет.

Почему шаблон находит больше текста, чем я ожидал?

Шаблон совпадает везде, где подходит, поэтому \d{3} находит и 123 внутри 12345. Добавьте \b с обеих сторон, чтобы искать целые слова или числа, или используйте ^ и $, чтобы требовать совпадения всего текста (или каждой строки при включённом флаге m), как это делает шаблон пароля в шпаргалке. \b опирается на символы слова из \w (A–Z, a–z, 0–9 и _) и считает буквы вроде é, ж или 한 символами, не входящими в слово, поэтому \bcafé\b не находит café, если за ним следует пробел. Кроме того, квантификаторы + и * жадные: в строке <b>x</b> шаблон <.+> захватывает всю строку, а <.+?> или <[^>]+> останавливается на первом >.

Почему шаблон, который работает в Python, PHP или Java, здесь выдаёт ошибку RegEx?

Эта страница использует движок JavaScript, который не принимает часть синтаксиса других движков, например именованные группы (?P<name>…), встроенные флаги вроде (?i) в начале, атомарные группы (?>…) и сверхжадные (possessive) квантификаторы вроде a++. Записывайте именованные группы как (?<name>…) и вместо встроенных флагов используйте флажки в разделе «Флаги». С флагом u JavaScript также строже относится к экранированию: \# считается ошибкой, как и \- вне квадратных скобок, поэтому удалите обратную косую черту или отключите u.

Почему \p{L} не находит буквы, а эмодзи считается двумя символами?

Классам свойств Unicode, таким как \p{L}, нужен флаг u; без него JavaScript читает \p{L} как обычный текст p{L}, а точка (.) совпадает только с половиной символа за пределами базовой многоязычной плоскости (BMP), к которым относятся многие эмодзи. При загрузке шаблона из шпаргалки загружаются и его флаги, и во всех шаблонах, кроме «Специальные символы», флаг u выключен, поэтому, прежде чем добавлять такой синтаксис, проверьте раздел «Флаги». Даже с флагом u точка совпадает с одной кодовой точкой, а некоторые эмодзи, например флаги или поднятый большой палец с оттенком кожи, состоят из двух и более кодовых точек. Позиции в подробностях совпадений считаются в кодовых единицах UTF-16, как в JavaScript, поэтому символы за пределами BMP занимают две позиции даже с флагом u.

Почему \n в замене не вставляет перевод строки?

Замена подчиняется правилам метода replace() в JavaScript: особое значение имеют только последовательности, начинающиеся с $, поэтому \n и \t вставляются как обратная косая черта с буквой, а не как перевод строки или табуляция. Поле однострочное, поэтому ввести в него перевод строки нельзя; добавьте его в сгенерированном коде. Чтобы удалить совпадения, отметьте «Заменить совпадения на» и оставьте поле пустым, как в шаблоне «Удалить теги HTML/XML» из шпаргалки.

Что будет, если шаблон работает очень медленно или находит очень много совпадений?

Если браузер позволяет использовать Web Workers, сопоставление выполняется в фоновом потоке и останавливается через 2 секунды, поэтому шаблон с катастрофическим возвратом, например (a+)+$ на длинной цепочке букв a, за которой следует другой символ, выводит сообщение, а не подвешивает страницу. Счётчик в блоке «Совпадения» учитывает все совпадения, но подсвечиваются и показываются в подробностях только первые 1000.

Можно ли вставить сгенерированный код в проект как есть?

Используйте его как отправную точку. Генератор записывает шаблон как литерал регулярного выражения в JavaScript и как строку в остальных языках, переписывает именованные группы и ссылки в замене там, где синтаксис отличается, например (?P<name>…) и \g<1> в Python, переносит флаги i, m и s и ожидает входные данные в переменной text. Если в шаблоне есть кавычки или косые черты, проверьте, правильно ли они экранированы во фрагменте кода. Движки всё равно различаются: пакет regexp в Go использует синтаксис RE2, который не поддерживает опережающие и ретроспективные проверки и обратные ссылки, а стандартный модуль re в Python не поддерживает классы \p{…}, поэтому проверьте код на своих данных.