DevToys Pro

бесплатные веб-инструменты для разработчиков

Блог
Оцените нас:
Попробуйте расширение для браузера:
← Назад к блогу

Dev Блог: RegEx‑тестер, JSONPath и XML‑валидатор для разработчиков

9 минут чтения

Тестирование регулярных выражений, запросы к 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

ФлагНазваниеЭффект
gGlobalИщет все совпадения, а не только первое
iCase-insensitiveИгнорирует регистр символов
mMultiline^ и $ работают на каждую строку
sDotall.
uUnicodeВключает поддержку 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. Экранированные спецсимволы
 &lt; &gt; &amp; &quot; &apos;
 < > & в текстовом содержимом

Типичные ошибки XML

<!-- Ошибка: неэкранированный амперсанд -->
<company>Smith & Jones</company>
Исправление: <company>Smith &amp; Jones</company>

<!-- Ошибка: неэкранированный знак < -->
<condition>if x < 10</condition>
Исправление: <condition>if x &lt; 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 &lt; b &amp;&amp; c &gt; 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Совпадения в реальном времени, группы, флаги
Запросы к JSONJSONPath TesterВыполнение выражений, фильтрация
Проверка синтаксиса XMLXML ValidatorПроверка well‑formed, отчёт об ошибках

Связанные инструменты

Инструменты тестирования хорошо работают в связке с другими утилитами:


Все тестеры в DevToys Pro

Эти инструменты входят в коллекцию Testers в DevToys Pro. Вся валидация выполняется прямо в браузере — ваши данные не покидают устройство.

Открыть тестеры →