Тестирование и отладка регулярных выражений: от основ к эффективным паттернам

Текст

Зачем тестировать regex онлайн?

Регулярные выражения мощны, но легко ошибиться с первого раза. Онлайн-тестер поможет вам:

  • Подсвечивать совпадения в реальном времени: видеть совпадения по мере ввода
  • Визуализировать группы захвата: чётко проверять каждую группу
  • Быстро переключать флаги: менять g / i / m / s без передеплоя
  • Мгновенно ловить ошибки синтаксиса: невалидные паттерны помечаются сразу

Шпаргалка по синтаксису regex

Базовое сопоставление

Синтаксис Значение Пример Совпадает с
. Любой символ (кроме переноса строки) a.c abc, a1c
\d Цифра \d{3} 123
\w Символ слова \w+ hello_1
\s Пробельный символ a\sb a b
[abc] Класс символов [aeiou] a, e, i
[^abc] Инвертированный класс [^0-9] не цифры

Квантификаторы

Синтаксис Значение Жадный / Ленивый
* Ноль или более a* / a*?
+ Один или более a+ / a+?
? Ноль или один a? / a??
{n,m} От n до m a{2,4}

Группы и ссылки

Синтаксис Значение Пример
(abc) Захватывающая группа (\d{4})-(\d{2})
(?:abc) Незахватывающая группа `(?:http
\1 Обратная ссылка (\w)\1 совпадает с aa, bb
(?<name>) Именованная группа (?<year>\d{4})

Использование онлайн-тестера regex

Шаги

  1. Откройте Тестер Regex
  2. Введите паттерн в поле regex
  3. Вставьте пример текста в поле тестирования
  4. Выберите флаги (g глобальный / i без учёта регистра / m многострочный)
  5. Проверьте подсветку и детали совпадений

Распространённые флаги

Флаг Значение По умолчанию
g Найти все совпадения Только первое совпадение
i Игнорировать регистр С учётом регистра
m Многострочный режим Однострочный
s . совпадает с переносами строк . не совпадает с переносами строк
u Режим Unicode

Распространённые ошибки

1. Жадное сопоставление

Текст: <div>hello</div><div>world</div>
Паттерн: <div>.*</div>
Результат: вся строка совпадает как один блок!

Решение: <div>.*?</div>  ← ленивое сопоставление, два отдельных совпадения

2. Катастрофический возврат

// Опасно: вложенные квантификаторы вызывают экспоненциальный возврат
/^(a+)+$/.test('a'.repeat(30) + 'b');
// Этот тест может занять секунды или зависнуть

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

3. Забыть экранировать спецсимволы

Паттерн: price.com     ← . совпадает с любым символом
Решение: price\.com        ← совпадает только с price.com

Практические примеры

Сценарий Паттерн
Телефон США (упрощённо) ^\+?1?\d{10,11}$
Email (базовый) ^[\w.-]+@[\w-]+\.[\w.]+$
URL ^https?:\/\/[\w.-]+(?:\.[\w]+)+[/\w.-]*$
IP-адрес ^(\d{1,3}\.){3}\d{1,3}$
Дата YYYY-MM-DD `^\d{4}-(?:0[1-9]
Иероглифы CJK [\u4e00-\u9fff]+

FAQ

Паттерн работает в тестере, но не в коде?

Проверьте, не забыли ли вы флаг g, или содержит ли строка переносы строк, а паттерн не имеет m / s.

Как сопоставить многострочный текст?

Используйте флаг s, чтобы . совпадал с переносами строк, или используйте [\s\S] вместо ..


Итоги

Regex необходим разработчикам, но синтаксис легко ошибиться. Используйте Тестер Regex для валидации и отладки в реальном времени. ToolsKu также предлагает Найти и Заменить и Сравнение Текстов для полного текстового рабочего процесса.

#正则表达式#Regex#文本处理#教程#调试