T

Text Machine

Мощные текстовые инструменты прямо в браузере

Тестер регулярных выражений

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

Регулярное выражение

/

/g

Флаги

Тестовый текст
Заменить на

Совет: включите флаг g, чтобы заменять каждое совпадение, а не только первое.

Как пользоваться Тестер регулярных выражений

  1. 1

    Напишите шаблон

    Введите регулярное выражение в поле шаблона, затем переключайте чипы флагов (g, i, m и другие), чтобы точно настроить, как работает сопоставление.

  2. 2

    Добавьте тестовый текст

    Вставьте текст, в котором нужно искать, в поле «Тестовый текст». Совпадения подсвечиваются мгновенно, пока вы вводите или редактируете шаблон.

  3. 3

    Изучите совпадения

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

  4. 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, чтобы преобразовать каждое вхождение.

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

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

Что такое регулярное выражение?
Регулярное выражение, или regex, — это компактный шаблон для поиска, сопоставления и преобразования текста. Разработчики используют его для проверки ввода, поиска и замены, разбора и извлечения данных практически в любом языке программирования и текстовом редакторе.
Какой движок регулярных выражений использует этот тестер?
Этот инструмент использует движок регулярных выражений JavaScript (ECMAScript), встроенный в ваш браузер, — тот же, что применяется в Node.js и современных веб-приложениях. Шаблоны и флаги ведут себя точно так же, как в вашем собственном коде на JavaScript.
Что означают флаги?
g (global) находит каждое совпадение, а не останавливается на первом; i игнорирует регистр букв; m заставляет ^ и $ срабатывать на переносах строк; s позволяет точке соответствовать символам перевода строки; u включает полную обработку Unicode; а y (sticky) привязывает поиск к определённой позиции в тексте.
Как работают группы захвата?
Круглые скобки в шаблоне создают группы захвата, которые выделяют части каждого совпадения. На нумерованные группы ссылаются как $1, $2 и так далее, а именованные группы вида (?<name>…) выводятся отдельно — так вы извлекаете именно те данные, которые вам нужны.
Отправляются ли мои данные на сервер?
Нет. Каждое совпадение и каждая замена выполняются полностью в вашем браузере с помощью встроенного движка регулярных выражений. Ничто из введённого вами не загружается, не записывается в журнал и не сохраняется, поэтому тестер работает офлайн и сохраняет ваш текст полностью конфиденциальным.

Похожие инструменты

Продолжайте работу с этими удобными инструментами

Конвертер HTML в Текст

Форматтер JSON

Декодер JWT

Генератор CSS-градиентов

Генератор теней CSS

Конвертер текста в HTML