Тестер регулярных выражений
Проверяйте шаблоны на реальном тексте прямо в браузере.
| # | Тип | Значение | Позиция |
|---|
Работает в браузере. То, что вы вводите, никуда не отправляется.
- Подсветка совпадений в реальном времени
- Именованные и нумерованные группы
- Безопасно работает в воркере
Как протестировать регулярное выражение
- Введите или вставьте свой шаблон и выберите нужные флаги.
- Вставьте текст, с которым нужно сопоставить шаблон.
- Проверьте подсвеченные совпадения, таблицу групп или предпросмотр замены.
Краткий справочник по синтаксису regex
| Шаблон | Соответствует |
|---|---|
| \d | Любой цифре, от 0 до 9 |
| \w | Любой букве, цифре или символу _ |
| \s | Любому пробельному символу |
| + | Одному или более предыдущих токенов |
| * | Нулю или более предыдущих токенов |
| ? | Нулю или одному, либо делает квантификатор ленивым |
| ^ и $ | Началу и концу строки или её линии |
Возможности regex в JavaScript
| Возможность | Синтаксис | Примечание |
|---|---|---|
| Именованные группы | (?<name>...) | Поддерживаются с ES2018 |
| Lookbehind | (?<=...) и (?<!...) | Поддерживаются с ES2018 |
| Режим Unicode | флаг u | Нужен для escape-последовательностей свойств Unicode вроде \p{Letter} |
| Без учёта регистра | флаг i | Та же идея, что и в большинстве других языков |
Советы по написанию шаблонов
- Экранируйте специальные символы вроде . ( ) [ ] обратной чертой, когда имеете в виду сам этот символ.
- Используйте группу без захвата (?:...) для группировки, когда позже не нужно ссылаться на это совпадение.
- Жадные квантификаторы забирают как можно больше. Добавьте ? после квантификатора, например +?, для ленивого сопоставления, которое останавливается на первой возможной точке.
- Проверяйте на граничных случаях, например на пустой строке или лишних пробелах, а не только на тексте, который ожидаете сопоставить.
Частые вопросы о Тестер регулярных выражений
Почему мой шаблон перестал отвечать?
Некоторые шаблоны могут откатываться экспоненциально долго на определённом тексте. Сопоставление выполняется в фоновом воркере с лимитом в 1.5 секунды, поэтому шаблон, уходящий в бесконечный перебор, останавливается, а не замораживает вкладку.
Что означают флаги?
g находит каждое совпадение, а не только первое, i игнорирует регистр, m заставляет ^ и $ работать построчно, s позволяет точке соответствовать переносам строк, u включает полный режим Unicode, y привязывает поиск к последней позиции, а d добавляет начальную и конечную позицию для каждого совпадения.
Поле замены меняет мой тестовый текст?
Нет. Оно показывает, что выдал бы String.replace, в отдельном поле результата, поэтому введённая тестовая строка остаётся точно такой, какой была.
Поддерживаются именованные группы захвата?
Да. Напишите группу как (?<name>...), и её имя появится рядом с номером группы в таблице совпадений.
Мой текст куда-то отправляется?
Нет. Сопоставление выполняется в воркере внутри вашей собственной вкладки браузера, и ничего из введённого не покидает страницу.
Какой движок регулярных выражений здесь используется?
Родной движок RegExp вашего браузера на JavaScript, тот же самый, что выполняет ваши шаблоны, если вы создаёте веб-приложение или скрипт на Node.js.
Что такое катастрофический backtracking?
Это когда шаблон с вложенными повторяющимися группами, вроде (a+)+b, может проваливаться экспоненциально дольше по мере роста ввода даже на один символ. Лимит воркера в 1.5 секунды здесь ловит такой шаблон, прежде чем он заморозит страницу.
Могут ли ^ и $ соответствовать началу и концу каждой строки, а не только всей строки целиком?
Да, включите флаг m (многострочный). Без него ^ и $ соответствуют только самому началу и концу всей тестовой строки.