Тестер регулярных выражений
Создавайте и тестируйте регулярные выражения на своём тексте в реальном времени. Каждое совпадение подсвечивается, группы захвата можно исследовать, а замены — просматривать заранее, и всё это в вашем браузере.
/
/g
Флаги
Совет: включите флаг g, чтобы заменять каждое совпадение, а не только первое.
Как пользоваться Тестер регулярных выражений
- 1
Напишите шаблон
Введите регулярное выражение в поле шаблона, затем переключайте чипы флагов (g, i, m и другие), чтобы точно настроить, как работает сопоставление.
- 2
Добавьте тестовый текст
Вставьте текст, в котором нужно искать, в поле «Тестовый текст». Совпадения подсвечиваются мгновенно, пока вы вводите или редактируете шаблон.
- 3
Изучите совпадения
Просмотрите в списке результатов каждое совпадение, его позицию в тексте, а также все группы захвата и именованные группы, чтобы убедиться, что шаблон ведёт себя как ожидается.
- 4
Замените или скопируйте
Введите замену, чтобы заранее увидеть подстановки с обратными ссылками вида $1, а затем скопируйте результат прямо в свой код или документ.
Регулярные выражения на практике: полевое руководство разработчика
Что на самом деле описывает regex
Регулярное выражение — это крошечный язык шаблонов для описания множеств строк. Вместо того чтобы спрашивать, равен ли текст фиксированному значению, вы описываете его форму — последовательность цифр, слово, за которым идёт знак @ и домен, три буквы, а затем дефис, — и движок ищет в вашем тексте каждую подстроку, которая подходит. Эта одна идея лежит в основе проверки ввода, поиска и замены, разбора логов, токенизации и извлечения данных почти в любом языке и редакторе.
Этот тестер использует движок JavaScript (ECMAScript), встроенный в ваш браузер, — тот же самый, что применяют Node.js и веб-приложения. Поэтому шаблон, который срабатывает здесь, ведёт себя точно так же в коде вашего приложения, что делает тестер достоверной песочницей для создания и отладки шаблона, прежде чем вставить его в проект.
Символьные классы и строительные блоки
Бо́льшая часть шаблона — это просто литеральные символы, которые соответствуют сами себе, перемежающиеся горсткой специальных токенов. Символьный класс в квадратных скобках соответствует любому одному символу из набора: диапазону строчных букв, набору гласных или цифре. Сокращение \d соответствует цифре, \w — словарному символу (буквы, цифры, подчёркивание), \s — пробельному символу, а точка соответствует любому символу, кроме перевода строки. Запишите сокращение в верхнем регистре, чтобы инвертировать его: \D — это любой нецифровой символ.
Это атомы, из которых вы собираете всё остальное. Шаблон для шестнадцатеричного цвета, например, — это привязка к знаку # с последующим повторяющимся символьным классом из шестнадцатеричных цифр; шаблон для слова — это просто \w, повторённый один или несколько раз. Стройте шаблоны из этих маленьких кусочков, а не хватайтесь за одно гигантское выражение.
Якоря, квантификаторы и чередование
Якоря соответствуют позициям, а не символам. Каретка (^) соответствует началу строки (или началу строки текста при флаге multiline), а знак доллара ($) — концу; токен границы слова \b соответствует границе между словарным и несловарным символом — именно так вы находите целое слово, не выхватывая его внутри более длинного. Квантификаторы управляют повторением: плюс означает один или более, звёздочка — ноль или более, а вопросительный знак — необязательность. Можно также задать точное число или диапазон с помощью формы с фигурными скобками, когда нужно, скажем, значение, которое повторяется от двух до четырёх раз.
Чередование с помощью символа вертикальной черты означает «или»: шаблон вида cat или dog соответствует любому из этих слов. Заключите альтернативы в круглые скобки, чтобы ограничить область выбора. По умолчанию квантификаторы жадные и захватывают столько, сколько могут; добавьте вопросительный знак после квантификатора, чтобы сделать его ленивым и сопоставлять как можно меньше, — это обычное лекарство, когда шаблон, призванный захватить один тег, проглатывает всё до последнего тега в строке.
Группы захвата и как ими пользоваться
Круглые скобки выполняют двойную работу: они группируют часть шаблона и захватывают то, чему эта часть соответствовала. После совпадения захваченные фрагменты доступны как нумерованные группы — первая пара скобок это группа один, следующая — группа два, — и список результатов здесь показывает каждую из них, чтобы вы могли убедиться, что извлекаете именно тот фрагмент, который задумали. Шаблон для строки, похожей на email, с отдельными скобками вокруг локальной части, домена и расширения позволяет считать эти три фрагмента по отдельности.
Именованные группы, которые записываются синтаксисом, помещающим имя в угловые скобки сразу после открывающей скобки, дают этим захватам читаемые метки вместо голых номеров и выводятся в отдельном разделе. Когда нужна только группировка без накладных расходов на захват, незахватывающая группа — открывающая скобка, за которой идут вопросительный знак и двоеточие, — сохраняет нумерацию групп чистой. Именно на эти захваты ссылается и ваш шаг замены.
Флаги меняют всё сопоставление
Флаги — это модификаторы, которые меняют то, как применяется весь шаблон целиком. Global находит каждое совпадение, а не останавливается на первом, что необходимо для замены всех вхождений, а не одного. Ignore-case заставляет буквы совпадать независимо от регистра. Multiline переопределяет якоря «каретка» и «доллар» так, чтобы они срабатывали на каждом переносе строки, а не только в самом начале и конце ввода.
Остальные флаги ситуативны, но важны. Dotall позволяет точке соответствовать и символам перевода строки, так что шаблон может охватывать несколько строк. Unicode включает полную обработку Unicode для кодовых точек за пределами базового диапазона и для escape-последовательностей свойств Unicode. Sticky привязывает каждое совпадение к позиции сразу после предыдущего — именно так токенизаторы проходят по вводу, не забегая вперёд. Переключайте флаги здесь и наблюдайте, как меняются подсвеченные совпадения, чтобы выработать интуицию для каждого из них.
Шаблоны, которые вы будете писать постоянно
Несколько форм встречаются снова и снова. Вытащить все целые числа из массива текста — это \d, повторённый один или несколько раз, с флагом global. Грубая проверка email — это один или несколько словарных символов, знак @, один или несколько словарных символов, литеральная точка и короткая череда букв; для быстрой проверки на вменяемость этого достаточно, хотя шаблон намеренно нестрогий. Обрезка или схлопывание череды пробельных символов, проверка слага из строчных букв и дефисов, извлечение содержимого между двумя маркерами — всё это повседневные задачи.
Сопротивляйтесь искушению проверять по-настоящему сложные форматы одним чудовищным шаблоном. Грамматики email и URL особенно печально известны тем, что их трудно полностью охватить регулярным выражением; для них нестрогий шаблон плюс настоящий парсер или специализированная библиотека обычно лучше, чем нечитаемое выражение, которое вы побоитесь тронуть через полгода.
Катастрофический бэктрекинг и как его избежать
Бэктрекинг (поиск с возвратом) движка — это то, что делает regex мощным, но он же может заставить шаблон взорваться. Когда две квантифицированные части шаблона могут соответствовать одним и тем же символам множеством перекрывающихся способов — классический пример это группа, которая сама повторяется, где внутреннее и внешнее повторение конкурируют, — движок может перебрать астрономическое число комбинаций на строке, которая в итоге не совпадает. На длинном вводе это может зависнуть на секунды или повиснуть совсем, а на сервере превращается в вектор отказа в обслуживании, известный как ReDoS.
Защита здесь структурная. Избегайте вложения одного квантификатора внутрь другого, способного соответствовать тому же самому; предпочитайте более конкретные символьные классы вседозволенной точке, чтобы у каждого шага был лишь один способ поглотить ввод; и привязывайте шаблон якорями, когда можете. Если рискованный шаблон всё-таки нужно проверить, сделайте это сначала здесь, на реалистичной строке худшего случая, где вышедший из-под контроля шаблон будет стоить вам вкладки браузера, а не сбоя в продакшене.
Безопасный предпросмотр замен
Поиск и замена — это то, где regex окупается каждый день, и поле замены позволяет увидеть результат заранее, прежде чем фиксировать его где бы то ни было. Ссылайтесь на группы захвата в замене через знак доллара и номер группы — $1 вставляет то, что совпало с первой группой, — чтобы переставить части даты, переформатировать имя или обернуть совпадения в разметку. Помните, что без флага global заменяется только первое совпадение; включите global, чтобы преобразовать каждое вхождение.
Всё работает локально в вашем браузере с помощью встроенного движка, поэтому ничто из вставленного — строки логов, исходный код, данные клиентов — не загружается, не записывается в журнал и не сохраняется. Это делает тестер безопасным местом, где можно дорабатывать шаблон на реальном образце, пока и совпадения, и результат замены не станут абсолютно верными, а затем уверенно скопировать готовый шаблон в свой код.
Часто задаваемые вопросы
Что такое регулярное выражение?
Какой движок регулярных выражений использует этот тестер?
Что означают флаги?
Как работают группы захвата?
Отправляются ли мои данные на сервер?
Похожие инструменты
Продолжайте работу с этими удобными инструментами