Dev Блог: RegEx‑тестер, JSONPath и XML‑валидатор для разработчиков
Тестирование регулярных выражений, запросы к JSON‑структурам и валидация XML‑документов — ключевые навыки для разработчиков, работающих с парсингом данных, валидацией ввода и интеграцией с API. Эти инструменты помогают ловить ошибки до того, как они попадут в продакшен.
В этом гайде разобраны инструменты тестирования и валидации, на которые опираются разработчики: RegEx‑тестер, JSONPath‑тестер и XML‑валидатор — с практическими примерами паттернов, запросов и типичных ошибок.
RegEx‑тестер
RegEx‑тестер позволяет интерактивно экспериментировать с регулярными выражениями, сразу показывая совпадения, группы захвата и результат валидации. Это быстрее и безопаснее, чем постоянно запускать код с новыми паттернами.
Базовые конструкции RegEx
// Классы символов
\d цифра (0-9)
\w "словесный" символ (a-z, A-Z, 0-9, _)
\s пробельный символ (пробел, таб, перевод строки)
. любой символ, кроме перевода строки
// Квантификаторы
* 0 или более раз
+ 1 или более раз
? 0 или 1 раз
{n} ровно n раз
{n,m} от n до m раз
// Якоря
^ начало строки/текста
$ конец строки/текста
\b граница словаТипичные паттерны RegEx
// Email (упрощённо)
^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,}$
// URL
^https?://[\w.-]+(/[\w./-]*)?$
// Телефон (US)
^\+?1?[-.]?\(?\d{3}\)?[-.]?\d{3}[-.]?\d{4}$
// IPv4-адрес
^(?:\d{1,3}\.){3}\d{1,3}$
// Дата (YYYY-MM-DD)
^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$
// UUID
^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$Regex new line и многострочные шаблоны
Работа с переводами строк — частый источник ошибок. По умолчанию . не совпадает с переводом строки:
// Входной текст с переводами строк
Line 1
Line 2
Line 3
// Паттерн: .*
// Без флагов: совпадение только "Line 1" (останавливается на
)
// С флагом 's' (dotall): .* совпадает со всем, включая переводы строк
// С флагом 'm' (multiline): ^ и $ работают построчно
// Явное сопоставление переводов строки
\n Unix (LF)
\r\n Windows (CRLF)
\r старый Mac (CR)
[\r\n]+ любая последовательность перевода строки
// Совпадение "через строки" без флага 's'
[\s\S]* любой символ, включая переводы строк
[\d\D]* альтернатива: цифра или не-цифра (то же самое)Флаги RegEx
| Флаг | Название | Эффект |
|---|---|---|
g | Global | Ищет все совпадения, а не только первое |
i | Case-insensitive | Игнорирует регистр символов |
m | Multiline | ^ и $ работают на каждую строку |
s | Dotall | . |
u | Unicode | Включает поддержку Unicode |
Группы захвата и обратные ссылки
// Группы захвата с помощью ()
Паттерн: (\d{4})-(\d{2})-(\d{2})
Ввод: 2025-12-21
Группы: $1 = 2025, $2 = 12, $3 = 21
// Именованные группы
Паттерн: (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})
// Не сохраняющая группа
Паттерн: (?:https?://)?www\.example\.com
└── не создаёт группу захвата
// Обратные ссылки (повтор того же текста)
Паттерн: (\w+)\s+\1
Совпадение: "the the" (поиск повторяющихся слов)Практика тестирования RegEx
- Тестируйте крайние случаи: пустые строки, спецсимволы, Unicode
- Проверяйте на катастрофический backtracking при вложенных квантификаторах
- Используйте не сохраняющие группы, если результат не нужен
- Якорите паттерны (^ и $), чтобы избежать частичных совпадений
- Документируйте сложные шаблоны комментариями (verbose‑режим)
Инструмент Regular Expression Tester показывает совпадения в реальном времени с подсветкой, группами захвата и настройкой флагов.
JSONPath‑тестер и валидатор
JSONPath — язык запросов к JSON, похожий на XPath для XML. JSONPath‑тестер помогает строить и проверять выражения до того, как вы внедрите их в код.
Синтаксис JSONPath
// Пример JSON
{
"store": {
"books": [
{ "title": "Clean Code", "price": 35.99, "author": "Martin" },
{ "title": "Refactoring", "price": 49.99, "author": "Fowler" }
],
"location": "NYC"
}
}
// Выражения JSONPath
$ корень документа
$.store объект store
$.store.books массив books
$.store.books[0] первая книга
$.store.books[-1] последняя книга
$.store.books[*] все книги
$.store.books[0,1] первые две книги
$.store.books[0:2] срез: индексы 0 и 1Операторы JSONPath
// Глубокий обход (recursive descent)
$..title все title на любой глубине
$..price все цены в документе
// Фильтры
$.store.books[?(@.price < 40)]
книги дешевле $40
$.store.books[?(@.author == 'Martin')]
книги автора Martin
// Подстановочный знак
$.store.* все прямые дочерние элементы store
$[*] все элементы, если корень — массив
// Операции с массивами
$.store.books.length количество книгСценарии использования JSONPath
- Извлечение данных из API — выбор значений из вложенного JSON
- Парсинг конфигураций — доставание опций из JSON‑конфигов
- Анализ логов — запросы к JSON‑логам
- Трансформация данных — маппинг JSON в другие структуры
- Тестирование — проверки структуры ответов API
JSONPath vs JavaScript
// Эквивалентные операции
// JSONPath
$.store.books[?(@.price > 40)].title
// JavaScript
data.store.books
.filter(book => book.price > 40)
.map(book => book.title)
// JSONPath более лаконичен для глубоких запросов
$..books[*].author // все авторы в любом месте
// В JavaScript придётся явно обходить структуру
function findAuthors(obj) {
// понадобится рекурсивный поиск
}Инструмент JSONPath Tester выполняет выражения над вашим JSON и показывает результат с подсветкой синтаксиса.
Валидация XML и проверка синтаксиса
XML‑валидатор проверяет, что документ XML корректно сформирован и соответствует базовым синтаксическим правилам. Некорректный XML ломает парсеры, поэтому валидация необходима до обработки.
Требования к "well‑formed" XML
<!-- Требования к корректному XML -->
1. Один корневой элемент
✓ <root><child/></root>
✗ <item/><item/> (несколько корней)
2. Правильная вложенность элементов
✓ <a><b></b></a>
✗ <a><b></a></b> (неправильная вложенность)
3. Закрытые теги
✓ <element></element>
✓ <element/> (самозакрывающийся)
✗ <element> (нет закрывающего тега)
4. Регистрозависимые имена тегов
✓ <Item></Item>
✗ <Item></item> (несовпадение регистра)
5. Атрибуты в кавычках
✓ <item id="1">
✗ <item id=1> (без кавычек)
6. Экранированные спецсимволы
✓ < > & " '
✗ < > & в текстовом содержимомТипичные ошибки XML
<!-- Ошибка: неэкранированный амперсанд -->
<company>Smith & Jones</company>
Исправление: <company>Smith & Jones</company>
<!-- Ошибка: неэкранированный знак < -->
<condition>if x < 10</condition>
Исправление: <condition>if x < 10</condition>
Или: <condition><![CDATA[if x < 10]]></condition>
<!-- Ошибка: недопустимый символ в имени тега -->
<2ndItem>value</2ndItem>
Исправление: <item2>value</item2> (имя не может начинаться с цифры)
<!-- Ошибка: неуказанная кодировка при необходимости -->
<?xml version="1.0"?> <!-- ОК для UTF-8 -->
<?xml version="1.0" encoding="UTF-8"?> <!-- Явно указана -->Секции CDATA
Секции CDATA позволяют включать текст, который иначе пришлось бы экранировать:
<!-- Без CDATA (с экранированием) -->
<script>
if (a < b && c > d) { }
</script>
<!-- С CDATA (без экранирования) -->
<script><![CDATA[
if (a < b && c > d) { }
]]></script>Пространства имён XML
<!-- Пространство имён по умолчанию -->
<root xmlns="http://example.com/ns">
<child>наследует namespace</child>
</root>
<!-- Пространство имён с префиксом -->
<root xmlns:ex="http://example.com/ns">
<ex:child>использует префикс ex:</ex:child>
</root>
<!-- Несколько пространств имён -->
<root xmlns="http://default.com"
xmlns:other="http://other.com">
<element>default namespace</element>
<other:element>other namespace</other:element>
</root>Сценарии валидации XML
- Пейлоады API — валидация SOAP‑запросов до отправки
- Конфигурационные файлы — проверка pom.xml, web.config и других XML‑конфигов
- Импорт данных — проверка XML‑экспортов из внешних систем
- RSS/Atom‑ленты — проверка корректности структуры фида
- SVG‑файлы — валидация векторной разметки
- XHTML — проверка «строгого HTML» как XML
Инструмент XML Validator проверяет корректность XML и показывает ошибки с номерами строк и описанием.
Краткий справочник по тестерам
| Задача | Инструмент | Ключевые возможности |
|---|---|---|
| Сопоставление шаблонов | RegEx Tester | Совпадения в реальном времени, группы, флаги |
| Запросы к JSON | JSONPath Tester | Выполнение выражений, фильтрация |
| Проверка синтаксиса XML | XML Validator | Проверка well‑formed, отчёт об ошибках |
Связанные инструменты
Инструменты тестирования хорошо работают в связке с другими утилитами:
- JSON Formatter — форматирование JSON перед запросами
- XML Formatter — prettify XML перед валидацией
- XML ↔ JSON Converter — конвертация между форматами
- Text Comparer — сравнение результатов тестов
Все тестеры в DevToys Pro
Эти инструменты входят в коллекцию Testers в DevToys Pro. Вся валидация выполняется прямо в браузере — ваши данные не покидают устройство.