Тестер Регулярных Выражений
Проверяйте регулярное выражение на своём тексте с живой подсветкой, нумерованными и именованными группами и предпросмотром замены — движком самого JavaScript и с рубильником для катастрофически откатывающихся паттернов: страница никогда не зависает.
Шпаргалка по языку паттернов
| Кусок | Значит | Заметка |
|---|---|---|
\d \w \s | цифра, символ слова, пробел | заглавные отрицают: \D — не-цифра |
+ * ? | один и более, ноль и более, необязательно | добавьте ? для ленивой версии |
{2,5} | от двух до пяти повторов | {2,} — два и более |
[abc] [^abc] | любой из, ни один из | диапазоны вроде [a-z0-9] |
(x) (?:x) (?<n>x) | захват, группа без захвата, именованный захват | если значение не нужно — (?:) |
^ $ \b | начало, конец, граница слова | с m — построчно |
(?=x) (?!x) | за которым следует, не следует | нулевой ширины — ничего не поглощают |
Две привычки, предотвращающие большинство regex-багов
Якорите то, что имеете в виду. Незаякоренный паттерн
совпадает где угодно внутри текста: \d{4} охотно
находит четыре цифры внутри шестнадцатизначного номера карты.
Валидационным паттернам почти всегда нужны ^…$ вокруг.
Экранируйте то, что вставляете. Четырнадцать
символов — операторы; точка в домене и плюс в телефонном номере
молча меняют смысл паттерна, если не записаны как \. и
\+.
Сопоставление выполняется локально в worker-потоке; ни паттерн, ни текст не покидают браузер.
Частые вопросы
Какой это диалект регулярных выражений?
В точности JavaScript — инструмент прогоняет паттерн через движок самого браузера, так что совпадающее здесь совпадёт в вашем коде, скриптах Node и в DevTools. Большая часть синтаксиса общая с PCRE, но поддержка lookbehind, классы \p{…} (с флагом u) и именованные группы следуют именно стандарту ECMAScript.
Что делают флаги?
g находит все совпадения, а не первое; i игнорирует регистр; m заставляет ^ и $ срабатывать на каждом переводе строки, а не только на краях текста; s разрешает точке пересекать переводы строк; u включает режим кодовых точек — один эмодзи становится одним символом и работают классы \p{Letter}. Комбинация флагов — часть смысла паттерна: одно и то же выражение с m и без может совпадать с совершенно разным.
Почему инструмент остановил мой паттерн через две секунды?
Катастрофический откат: паттерн вроде (a+)+$ на длинной цепочке a с одной b в конце заставляет движок перепробовать экспоненциально много способов разбить эти a, прежде чем признать неудачу. Инструмент выполняет сопоставление в отдельном потоке и убивает его через две секунды — в продакшен-коде тот же паттерн просто завис бы; это настоящий класс отказа в обслуживании (ReDoS). Лечение — перестроить паттерн так, чтобы альтернативы не могли заново делить один и тот же текст: вложенные квантификаторы вроде (a+)+ заменить одним a+, а перекрывающиеся уайлдкарды — явными классами символов.
Что такое пустое совпадение и почему оно на каждой позиции?
Паттерн, способный совпасть с нулём символов — a*, \b, (?=x) — успешен, ничего не поглощая, поэтому с флагом g он успешен по разу на каждой применимой позиции. Инструмент помечает их тонкой кареткой. Это законно (так работают lookahead и якоря), но обычно знак, что квантификатор должен быть +, а не *.
Как использовать захваченные группы в замене?
Поле замены говорит на синтаксисе String.replace: $1–$9 для нумерованных групп, $<имя> для именованных, $& для всего совпадения, $$ для буквального доллара. Не участвовавшая группа подставляется пустой строкой — в столбце групп она видна как прочерк.
Загружается ли куда-то мой текст или паттерн?
Нет — сопоставление выполняется целиком в браузере, в worker-потоке на вашей машине. Строки логов, конфиги и прочие тексты, на которых проверяют паттерны, — ровно те данные, которым не следует путешествовать; здесь они и не путешествуют.
Похожие инструменты
- Конструктор схем и блок-схемРисуйте блок-схемы и диаграммы, соединяйте блоки стрелками, которые прокладывают себя сами, и раскладывайте всё автоматически. Экспорт в SVG.
- Генератор паролейСоздавайте надёжные пароли криптографическим генератором браузера с оценкой стойкости.
- HTML-сущностиКодируйте текст для HTML или декодируйте сущности обратно — ломающие разметку знаки, именованные наборы, числовые ссылки до эмодзи. Ровно один проход.