Тестер регулярных выражений/ В реальном времени

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

//
Быстро:
Тестовая строка

Введите шаблон выше.

Этот инструмент решил вашу проблему?

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

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

Распространённые сценарии использования regex

Валидация форм: проверка форматов email, телефона, ID. Извлечение данных: извлечение определённых паттернов из текста. Замена текста: массовая замена текста по паттерну. Анализ логов: фильтрация строк по условиям.

Примеры кода

JavaScript
const re = /(?<year>\d{4})-(\d{2})/g;
const str = "2024-03 and 2025-01";

for (const m of str.matchAll(re)) {
  console.log(m[0]);          // "2024-03"
  console.log(m.groups.year); // "2024"
  console.log(m[2]);          // "03"
  console.log(m.index);       // 0
}
Python
import re

pattern = r"(?P<year>\d{4})-(\d{2})"
text = "2024-03 and 2025-01"

for m in re.finditer(pattern, text):
    print(m.group(0))         // "2024-03"
    print(m.group("year"))    // "2024"
    print(m.group(2))         // "03"
    print(m.start())          // 0
Go
import "regexp"

re := regexp.MustCompile(
  `(?P<year>\d{4})-(\d{2})`,
)
text := "2024-03 and 2025-01"

matches := re.FindAllStringSubmatch(
  text, -1,
)
// matches[0][0] = "2024-03"
// matches[0][1] = "2024"  (year)
// matches[0][2] = "03"
Rust
use regex::Regex;

let re = Regex::new(
  r"(?P<year>\d{4})-(\d{2})"
).unwrap();
let text = "2024-03 and 2025-01";

for cap in re.captures_iter(text) {
    println!("{}", &cap[0]);  // "2024-03"
    println!("{}", &cap["year"]); // "2024"
    println!("{}", &cap[2]);  // "03"
}

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

Для чего нужны флаги регулярных выражений?
g (глобальный) находит все совпадения; i (игнорирование регистра) делает поиск нечувствительным к регистру; m (многострочный) заставляет ^ и $ совпадать с границами строк; s (dotAll) позволяет . совпадать с переводами строк.
Как использовать группы захвата при замене?
Заключите части шаблона в () для создания групп, затем ссылайтесь как $1, $2 в поле замены. Пример: шаблон (\d{4})-(\d{2}) с заменой $2/$1 превращает 2024-03 в 03/2024.
Что означает индекс совпадения?
Индекс — это смещение символа с нуля, где начинается совпадение в исходной строке. Полезно в коде — соответствует индексу, возвращаемому String.prototype.exec().
Как совпадать с символами Unicode / CJK?
Для китайских иероглифов: [\u4e00-\u9fff]. Более широкий диапазон: [\u4e00-\u9fff\u3400-\u4dbf]. С флагом u можно использовать \p{Script=Han} для всех иероглифов.
Что такое утверждения lookahead и lookbehind?
Они совпадают с позициями, а не символами: (?=…) положительный lookahead — правая сторона должна совпадать; (?!…) отрицательный lookahead — правая сторона не должна совпадать; (?<=…) положительный lookbehind — левая сторона должна совпадать.
Почему моё регулярное выражение вызывает бесконечный цикл?
С флагом g шаблон, совпадающий с пустыми строками (как a* или .*), не продвигает lastIndex после пустого совпадения. Этот инструмент автоматически продвигает lastIndex и ограничивает до 2000 совпадений.