Command Palette

Search for a command to run...

Регулярный конструктор: тестирование регулярных выражений визуально (с шпаргалкой)

Регулярный конструктор: тестирование регулярных выражений визуально (с шпаргалкой)

T
Toolz Team
|Jul 1, 2026|17 Мин. читать

Часть коллекции Разработка

регулярный конструктор

Создавайте, тестируйте и отлаживайте регулярные выражения с помощью сопоставления в реальном времени и полную чит-код

Открыть инструмент «регулярный конструктор»

У меня есть признание, которое заставит пуристов-регексов вздрогнуть: первые несколько лет моей карьеры я писал регулярные выражения, копируя-вставляя из Stack Overflow, меняя один символ, запуская код, видя, что он не работает, и повторяя, пока он не сработал. Я не понял ' не понял шаблоны - я запугал их, заставив подчиниться. Это было медленно, и что еще хуже, шаблоны, которые я отправлял, были хрупкими, как я мог и #39; не вижу.

Что это исправило, так это 't чтение теории (хотя в конце концов я это сделал). Это был визуальный тестер - коробка, в которой я печатаю шаблон, коробка, куда я вставляю тестовые строки и сопоставляю их, которые зажигаются в тот момент, когда я что-то меняю. Внезапно я смог полагаться почему \d+ Схватил больше, чем хотел, или почему моя шаблон электронной почты отклонил совершенно допустимый адрес. Регулярное выражение перестало быть игрой в угадайку и стала жесткой петлей обратной связи.

это именно то, что регулярный конструктор на Toolz.dev is. вы пишете шаблон, падаете в тестовых данных, переключаете флаги, и смотрите совпадения и захваченные группы выделять в реальном времени. он полностью работает в вашем браузере, поэтому линии журнала или пользовательские данные вы 're тестирование против никогда не быть загружены где-либо. Это руководство является regex ссылки я бы хотел I 'd имел тогда - шаблоны, которые я на самом деле повторно использую, полный шпаргалка, и единственная ошибка, которая может взять вниз производственный сервер.

TL;DR: Вставьте свой шаблон и протестируйте строки в регулярный конструктор и переключите g/i/m Флаги, чтобы увидеть матчи, выделенные вживую. Начните просто, добавьте ограничения, чтобы убить ложные срабатывания, и проверьте враждебные данные, чтобы избежать катастрофического возврата. Для извлеченных данных соедините их с Форматтер JSON а Конвертер Base64, йо- Все клиенты, все бесплатно.


Что такое регулярное выражение?

Регулярное выражение - regex или regexp - это компактная строка, описывающая шаблон поиска Вместо & quot;найти слово cat, & quot; можно сказать & quot;найти любое пятизначное число, & quot; & quot;найти всё, что выглядит как электронное письмо, & quot; или & quot;найти каждую строку, которая начинается с ERROR. & quot; почти каждый язык и редактор поддерживают их, что делает навык таким портативным: выучите его один раз и вы используете в JavaScript, Python, своем grep, и ваша идея найти и заменить.

Концепция появилась в рамках формальной теории языка 1950-х годов, и Кен Томпсон подключил ее к вычислениям в 1960-х годах для редактирования текста. Эта история имеет значение по одной практической причине, я вернусь к: «Обычные» языки имеют ограничения, поэтому regex действительно не может анализировать вложенные структуры, такие как HTML, независимо от того, насколько умно вы становитесь.

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

Вот фундаментальные строительные блоки - алфавит, из которого вы собираете узоры:

синтаксис смысл пример спичка
. Любой символ, кроме новой строки h.t Шляпа, горячая, хитка
\d Любая цифра (0-9) \d{3} 123, 456
\w Слово char (A-Z, A-Z, 0-9, _) \w+ Здравствуйте, test_123
\s Любое пробел hello\sworld Привет мир
^ Начало строки ^Hello Привет на старте
$ конец струны end$ конец в конце
* ноль или более ab*c AC, ABC, ABBC
+ один или несколько ab+c ABC, ABBC
? ноль или один colou?r цвет, цвет
{n} ровно n раз \d{4} 2026
{n,m} между н и м \d{2,4} 12, 123, 1234
[abc] класс персонажа [aeiou] любая гласная
[^abc] отрицательный класс [^0-9] Любой нецифровой
(...) Захват группы (hello) Захватывает "Привет"
a|b чередование (или) cat|dog кошка или собака

Какие шаблоны регулярных выражений должны держать каждый разработчик под рукой?

Это те, которые я тестировал, сломал, исправлен и теперь храню в личном файле фрагмента. скопируйте их прямо в регулярный конструктор И бросайте в них свои краевые чехлы.

Электронная почта (практический вид)

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

это соответствует [email protected] а [email protected], и отклоняет @example.com или user@com, йо- Однако вот важная честность: полная грамматика электронной почты в RFC 5322 чудовищно сложно - технически это позволяет цитировать строки и комментарии почти никто не использует. Don't гонитесь за 100% RFC соответствие с regex. Соответствовать практичные 99% с шаблоном выше, затем подтвердить адрес реален, отправив верификационное электронное письмо. That's ошибка, которую я вижу больше всего: команды сжигают дни на "airtight" email regex, который все еще может't сказать реальный почтовый ящик из опечатки.

сводка

^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&\/=]*)$

спичка https://toolz.dev а http://www.example.com/path?query=value; отвергает ftp://... и обычный текст.

номер телефона США

^(\+1)?[-.\s]?\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}$

достаточно гибкий для 555-123-4567, (555) 123-4567, +1 555.123.4567, и 5551234567, йо-

IPv4 адрес

^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$

Вложенная чередование — это то, что обеспечивает то, что каждый октет остается в 0–255, поэтому он правильно отклоняет 999.999.999.999, йо-

Надежная проверка паро

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$

Требуется не менее 8 символов со строчными буквами, прописными буквами, цифрами и символом. выше (?=...) каждый из заглядывающих утверждает одно условие, не потребляя персонажей - аккуратный трюк, который стоит понять.

Дата ISO (ГГГГ-ММ-ДД)

^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$

спичка 2026-07-11, отклоняет 2026-13-01 а 2026-02-32, йо-

шестигранный цвет

^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$

спичка #4466EE, #abc, #000000, йо-


Шпаргалка по регулярному выражению

Держите это в закрепленном. Это ссылка, которую я проверяю больше всего.

якорные

образец описание
^ Начало строки (или строки в многострочном режиме)
$ Конец строки (или строка в многострочном режиме)
\b граница слова
\B несловная граница

квантильники

образец описание
* 0 или более (жадных)
+ 1 или более (жадный)
? 0 или 1 (жадный)
*? +? ?? Ленивые версии - совпадают как можно меньше
{n} {n,} {n,m} точно n/n или более / между n и m

Классы персонажей

образец описание
[abc] а, б или с
[^abc] Не А, В или С
[a-z] [A-Z] [0-9] хребет
\d \D Цифра / нецифра
\w \W Word char / не-слово
\s \S Пробел / небелое пространство

Группы и осмотр

образец описание
(abc) группа захвата
(?:abc) не захватывающая группа
(?<name>abc) названная группа захвата
(?=abc) / (?!abc) Положительный / отрицательный взгляд
(?<=abc) / (?<!abc) Положительный / отрицательный взгляд

флаги

знамя описание
g Глобальный - найдите все совпадения
i нечувствительный к регистру
m Многолинейный - ^ а $ Сопоставьте границы линий
s Доталл - . Соответствует новым строкам
u Поддержка Юникода

Как вы строите и отлаживаете шаблон, не теряя ни часа?

Мой процесс скучный специально, потому что скучно повторяемо:

  1. Начните с простейшей вещи, которая соответствует одному реальному примеру. Не пытайтесь сразу же обрабатывать каждый случай.
  2. Вставьте как положительные, так и отрицательные строки теста в регулярный конструктор- вещи, которые должны совпадать, и вещи, которые не должны совпадать.
  3. Затягивайте, чтобы убить ложные срабатывания. Добавить якоря (^, $) так что шаблон соответствует всей строке и подкаляет . Для конкретных классов, таких как [a-z] или [^,], йо-
  4. кинуть в него состязательный вклад- пустые строки, огромные входные данные, Unicode и буквальные символы регекса в качестве данных.
  5. Только тогда оптимизируйте.

Когда что-то не так себя ведет, это почти всегда одна из трех вещей. если это Слишком много соответствует, ваши кванторы жадны - сделайте их ленивыми (*?) или ваши занятия более конкретные. если это Слишком мало соответствует, вам, вероятно, понадобится i флаг или забыл избежать специального символа. если это Ничего не соответствует, проверьте наличие неэсидируемых метасимволов (., *, +, (, [, {, и т. д.) предназначены для буквальных или невидимых символов, таких как вкладки, прячущиеся в вашей тестовой строке.


Что такое катастрофическое отступление и почему его нужно бояться?

Это раздел, который я татуирую на новых разработчиках, если бы мог. В начале я отправил регулярное выражение ввода-вывода, которое выглядело совершенно невинным, и однажды один запрос увеличил ядро процессора до 100% и оставалось там. Шаблон был проблемой.

Когда двигатель регулярного выдерживания не может найти совпадение, он отступление- он отступает и пытается другими способами удовлетворить шаблон Определенные формы заставляют количество путей взрываться экспоненциально. Хрестоматийный пример:

^(a+)+$

кормить, что вход как aaaaaaaaaaaaaaaaaaaab (бег a заканчивающийся в b), а вложенные кванторы дают движку астрономическое количество способов разделить aS, все из которых он пытается, прежде чем заключить &quot;No Match.&quot; Ваше приложение зависает. Это настоящий класс отказа в обслуживании, называемый повторный (Отказ в обслуживании в обычном выражении), и злоумышленники используют его.

Как оставаться в безопасности:

  1. Никогда не вводите квантификаторы. (a+)+, (a*)*, и (a+)* являются красными флажками.
  2. Используйте атомные группы или притяжательные кванторы Где их поддерживает двигатель: (?>a+) или a++, йо-
  3. Будьте конкретны. [a-z]+ отступает меньше, чем .+ Потому что у него меньше путей для изучения.
  4. Закрепите свои узоры Таким образом, двигатель выходит из строя при несоответствующем входе.
  5. Тестируйте со строками, которые почти совпадают, но не совпадают в самом конце- это и #39; худший случай для обратного отслеживания.

Если вы находитесь в GO, эта проблема просто не существует, что подводит меня к следующему разделу.


Как регулярные выражения отличаются между языками?

Базовый синтаксис движется хорошо, но детали кусаются. Это различия, которые я действительно споткнулся.

JavaScript:

const regex = /\d{3}-\d{4}/g;
const pattern = new RegExp('\\d{3}-\\d{4}', 'g'); // note the doubled backslashes
'555-1234'.match(regex);              // ["555-1234"]
const m = '2026-07-11'.match(/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/);
m.groups.year;                        // "2026"

Осторожно: Lookbehind прибыл только в ES2018, \d Соответствует только цифрам ASCII, а g флаг делает .test() с госпокой lastIndex- тонкий источник ошибок в циклах.

питон:

import re
pattern = re.compile(r'\d{3}-\d{4}')      # raw strings avoid double-escaping
pattern.findall('Call 555-1234 or 555-5678')  # ['555-1234', '555-5678']

Всегда используйте необработанные строки (r'...'). помнят re.match только якоря в начале - использовать re.search найти где угодно. а re.VERBOSE Позволяет писать многострочные комментируемые шаблоны, которые являются спасательным средством для сложных.

PHP: Шаблоны нужны разделители ('/\d{3}-\d{4}/'), он использует мощный движок PCRE, и preg_match обратный 1, 0, или false об ошибке - так что уточняйте ===, йо-

ИДИТЕ: Использует двигатель RE2, который намеренно Сбросы lookheads, lookbehinds и backreferences в обмен на гарантию сопоставления с линейным временем. Это означает, что катастрофическое возврат даже невозможен - действительно другой компромисс, который стоит знать, когда вы выбираете язык для сопоставления ненадежных входных данных.


Реальный пример: анализ строки журнала Apache

Вот в чем действительно хороша регулярная выражение. Стандартная строка журнала доступа Apache выглядит так:

192.168.1.1 - frank [11/Jul/2026:10:27:10 -0500] "GET /api/users HTTP/1.1" 200 1234

Этот узор разъединяет его:

^(\S+) \S+ (\S+) \[([^\]]+)\] "(\S+) (\S+) (\S+)" (\d{3}) (\d+)$

Вставьте оба в регулярный конструктор И каждая захваченная группа загорается отдельно:

группа содержащийся пример
1 IP-адрес 192.168.1.1
2 Имя пользователя откровенный
3 отметка времени 11.07.2026:10:27:10 -0500
4 HTTP-мет становиться
5 Путь к запросу /API/пользователи
6 HTTP-верс HTTP/1.1
7 Код статуса 200
8 Размер ответа 1234

Как только группы выстроятся в тестер, переводя его в re.findall В Python или match() в JavaScript это тривиально - и вы уже знаете, что это работает.


Часто задаваемые вопросы

Что такое конструктор регулярных выражений?

Конструктор регулярных выражений — это интерактивный инструмент, в котором вы набираете регулярное выражение и сразу видите, что оно соответствует тестовым строкам, с выделенными соответствиями и захваченными группами. Он заменяет медленный цикл записи-run-run-fail-rewrite в вашем коде на живой. выше регулярный конструктор На Toolz.dev это делается полностью в вашем браузере, поэтому тестовые данные остаются на вашем компьютере.

Совпадают ли шаблоны регулярных выражений в каждом языке программирования?

Базовый синтаксис почти идентичен, но детали достаточно различаются, чтобы вызвать ошибки. В более старом JavaScript не было LookBehind, в Go движок RE2 Go вообще не имеет проверок или обратных ссылок, а группы имен Python с (?P<name>...) в некоторых контекстах. Всегда подтверждайте шаблон на языке, на который вы на самом деле ориентируетесь, а не на мобильность.

Как проверить адрес электронной почты с помощью regex?

Используйте практический узор, такой как ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$, который обрабатывает подавляющее большинство реальных адресов. не пытайтесь полностью RFC 5322 соответствие в regex - грамматика слишком сложная и вы &#39;ll все еще отклонить действительные адреса или принять typos.Pair the regex с верификацией электронной почты, чтобы подтвердить, что входящий в папку действительно существует.

Почему мое регулярное выражение зависает приложение?

Почти всегда катастрофические отступы. Шаблоны с вложенными квантификаторами, такими как (a+)+ Создайте экспоненциальное количество путей совпадения, когда они соответствуют входу, который почти совпадает, но в конечном итоге терпит неудачу, и движок пробует их все. Удалите вложенные квантификаторы, предпочитайте определенные классы символов, а не .+, и добавьте анкеры, чтобы двигатель мог быстро выйти из строя.

Могу ли я использовать regex для анализа HTML или JSON?

Нет, ни для чего, кроме тривиального извлечения. HTML и JSON не являются обычными языками - они допускают произвольное вложение, которое regex принципиально не может отслеживать.Используйте реальный синтаксический анализатор: DOMParser или Cheerio для HTML, и JSON.parse или инструмент JSON для JSON. regex — неправильный инструмент, в который гнездится структура.

Какая разница между жадным и ленивым?

жадные квантификаторы (*, +, ?) берите как можно больше и отступайте, если нужно, ленивые (*?, +?, ??) хватать как можно меньше и расширяться только при принуждении. против <b>bold</b>, жадный <.*> глотает всю струну, пока ленится <.*?> останавливается на первом <b>, йо- Выбор правильного часто является исправлением, когда шаблон слишком много подходит.

Как избежать специальных символов в регулярном выражении?

Поставьте обратную косую косую черту перед любым метасимволом, который вы имеете в виду буквально: \., \*, \+, \?, \(, \), \[, \], \{, \}, \^, \$, \|, и \\. Большинство языков также предлагают вам помощь, позволяющую избежать целой строки - re.escape() например, в Python - что безопаснее, чем побег вручную, когда строка поступает из пользовательского ввода.

Что означают флаги регулярных выражений g, i и m?

g (глобальный) находит каждое совпадение вместо того, чтобы останавливаться на первом, i (игнорировать случай) делает шаблон нечувствительным к регистру, и m (многолинейный) делает ^ а $ совпадать на каждом разрыве строки, а не только на начало и конец струны. Они свободно сочетаются, поэтому gim Делает все три. частая уловка в JavaScript: повторное использование g Регулярное выражение через вызовы lastIndex между ними, что делает test() чередуйте true и false - воссоздайте шаблон или сбросьте lastIndex, йо-

Что такое lookhead в регулярных выражениях?

Смотрится, что что-то не следует или не следует, не потребляя его. foo(?=bar) спичка foo только когда bar идет дальше; foo(?!bar) Соответствует только тогда, когда он не работает. глядя за ((?<=...), (?<!...)) делает то же самое наоборот, и приземлился в современных JavaScript, Python и PCRE - но не в Go&#39;s RE2, который полностью отвергает оба правила пароля являются классическим использованием: ^(?=.*\d)(?=.*[a-z]).{8,}$ Утверждается, так что каждое требование проверяется независимо в одной и той же позиции.

Как сопоставить номер телефона с регулярным выражением?

Для определенного формата будьте явными, а не умными: ^\(\d{3}\) \d{3}-\d{4}$ спичка (555) 123-4567, йо- Для переноса различных разделителей разрешать дополнительные, такие как ^\+?1?[-.\s]?\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}$. Нумерация телефонов в разных странах беспорядочна, поэтому перед сохранением проверьте только тот формат, который вы фактически принимаете, и нормализуйте его по цифрам - создайте и протестируйте шаблон в реальном времени, прежде чем доверять ему.


завершение

Регулярное выражение перешло от моего самого страшного навыка к одному из самых популярных, когда я начал создавать шаблоны в живом тестере, а не гадать в моем редакторе. Начните с простого, тестируйте на реальный и враждебный вклад, уважайте катастрофические отклики и храните личную библиотеку шаблонов, которым вы доверяете.

выше регулярный конструктор на Toolz.dev этот цикл выполняется быстро, с сопоставлением в реальном времени, групповым выделением и переключателями флагов - все это работает в вашем браузере, поэтому данные вашего теста остаются конфиденциальными. Когда ваш шаблон извлекает JSON, передайте его в Форматтер JSON; Когда он захватывает BOBAS64 BLOB, декодируйте его с помощью Конвертер Base64, йо- или просмотрите все 600+ бесплатных инструментов по адресу Toolz.dev, йо-

Frequently Asked Questions

A regex builder is an interactive tool where you type a regular expression and immediately see it matched against test strings, with matches and captured groups highlighted. It replaces the slow write-run-fail-rewrite loop in your code with a live one. The Regex Builder on toolz.dev does this entirely in your browser, so test data stays on your machine.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!