Тестирование и отладка регулярных выражений: от основ к эффективным паттернам
Текст
Зачем тестировать 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
Шаги
- Откройте Тестер Regex
- Введите паттерн в поле regex
- Вставьте пример текста в поле тестирования
- Выберите флаги (
gглобальный /iбез учёта регистра /mмногострочный) - Проверьте подсветку и детали совпадений
Распространённые флаги
| Флаг | Значение | По умолчанию |
|---|---|---|
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#文本处理#教程#调试