API URLPattern: Современный Подход к Сопоставлению URL
Если вы когда-либо писали регулярное выражение для извлечения идентификатора пользователя из пути URL, вы знаете эту боль. Паттерн начинается просто, а затем превращается в нечитаемый набор экранирующих символов и групп захвата. Когда требования меняются, вы отлаживаете регулярные выражения вместо того, чтобы разрабатывать функционал.
API URLPattern предлагает лучший подход. Это стандарт WHATWG для современного сопоставления URL, который работает нативно в браузерах, позволяя сопоставлять и разбирать URL с помощью читаемых паттернов вместо загадочных регулярных выражений. Эта статья рассказывает о том, какие проблемы решает URLPattern, его основные концепции и когда frontend-разработчикам стоит его использовать.
Ключевые Выводы
- URLPattern — это стандарт WHATWG, который обеспечивает читаемое и поддерживаемое сопоставление URL без сложных регулярных выражений
- API использует именованные параметры (например,
:id) вместо позиционных групп захвата, делая извлечённые данные самодокументируемыми - URLPattern может сопоставлять полные URL или отдельные компоненты (протокол, имя хоста, путь, параметры запроса, хеш и т.д.)
- Поддержка браузерами достигла статуса Baseline Newly Available в конце 2025 года, при этом Chrome, Edge, Firefox и Safari все его поддерживают
- Лучше всего подходит для service workers, кастомной логики маршрутизации в SPA и состояния UI, управляемого URL — не как замена полноценным фреймворкам маршрутизации
Какую Проблему Решает URLPattern?
До появления URLPattern у разработчиков было два основных варианта для парсинга веб-URL: писать собственные регулярные выражения или подключать библиотеки маршрутизации.
Регулярные выражения работают, но создают проблемы с поддержкой. Паттерн вроде /^\/users\/([a-zA-Z0-9]+)\/?$/ требует мысленного разбора каждый раз, когда вы к нему возвращаетесь. Группы захвата позиционные и анонимные — если вы добавляете новый сегмент, существующий код ломается.
Библиотеки маршрутизации решают проблему читаемости, но увеличивают размер бандла и вводят специфичный для фреймворка синтаксис. Ваша логика сопоставления URL становится привязанной к конкретному инструменту.
URLPattern предоставляет стандартизированное промежуточное решение. Он использует интуитивный синтаксис, заимствованный из популярных соглашений маршрутизации:
const pattern = new URLPattern({ pathname: '/users/:id' })
Сегмент :id — это именованная группа. Никаких экранирующих символов. Никаких нумерованных групп захвата. Паттерн читается как структура URL, которую он сопоставляет.
Основные Концепции API URLPattern
Паттерны Охватывают Полные URL или Отдельные Компоненты
URLPattern может сопоставлять как полные URL, так и конкретные компоненты. URL разбивается на восемь частей: протокол, имя пользователя, пароль, имя хоста, порт, путь, параметры запроса и хеш.
Вы можете определить паттерны для любой комбинации:
const pattern = new URLPattern({
hostname: '*.example.com',
pathname: '/api/:version/*'
})
Это сопоставляет любой поддомен example.com с путём API. Компоненты, которые вы не указываете, по умолчанию становятся wildcards, сопоставляя что угодно.
Тестирование vs. Извлечение Структурированных Групп
URLPattern предлагает два основных метода с различными целями.
Метод test() возвращает булево значение — соответствует ли этот URL паттерну?
pattern.test('https://api.example.com/api/v2/users') // true
Метод exec() возвращает детальные результаты сопоставления, включая захваченные группы:
const result = pattern.exec('https://api.example.com/api/v2/users')
console.log(result.pathname.groups.version) // 'v2'
Именованные группы становятся свойствами объекта. Больше не нужно обращаться к result[1] и надеяться, что индекс правильный.
Поддержка URLPattern в Браузерах
URLPattern достиг статуса Baseline Newly Available в конце 2025 года. Chrome, Edge, Firefox и Safari все его поддерживают. Это больше не экспериментальная функция или API только для Chrome — это стабильный веб-стандарт, который можно использовать в продакшене.
Для серверного JavaScript картина отличается. Последние релизы Node.js 23+ включают URLPattern, но реализация остаётся экспериментальной согласно официальной документации. Если вы пишете код, который работает в обеих средах, проверяйте поведение Node.js отдельно от ожиданий браузера.
Discover how at OpenReplay.com.
Когда Использовать URLPattern
URLPattern блестяще работает как низкоуровневый примитив, а не как полноценное решение для маршрутизации. Рассмотрите его использование для:
Service workers, которым нужно перехватывать запросы и применять различные стратегии кеширования на основе паттернов URL.
Логика маршрутизации SPA, где вы создаёте кастомную обработку навигации или вам нужно сопоставление URL вне роутера вашего фреймворка.
Состояние UI, управляемое URL, когда компонентам нужно парсить текущий URL и извлекать параметры.
URLPattern не заменит React Router или Vue Router. Эти фреймворки предоставляют навигационные guards, ленивую загрузку и интеграцию с жизненными циклами компонентов. URLPattern хорошо справляется с одной задачей: сопоставление URL с паттернами и извлечение данных.
Практическое Сравнение
Рассмотрим извлечение категории и ID из /products/electronics/123.
С помощью regex:
const match = /^\/products\/([^/]+)\/(\d+)$/.exec(pathname)
const category = match?.[1]
const id = match?.[2]
С помощью URLPattern:
const pattern = new URLPattern({ pathname: '/products/:category/:id' })
const result = pattern.exec({ pathname })
const { category, id } = result?.pathname.groups ?? {}
Версия с URLPattern длиннее, но самодокументируемая. Через шесть месяцев вы поймёте, что она делает, без декодирования регулярных выражений.
Заключение
URLPattern стандартизирует сопоставление URL в браузерах с чистым, читаемым синтаксисом. Он извлекает именованные параметры без сложности регулярных выражений и работает последовательно, независимо от того, сопоставляете ли вы пути, имена хостов или полные URL.
Для frontend-разработчиков, создающих SPA, service workers или любой функционал, управляемый URL, URLPattern предоставляет перспективную основу. Ознакомьтесь с документацией URLPattern на MDN для полного справочника по синтаксису и начните заменять эти паттерны регулярных выражений на что-то поддерживаемое.
Часто Задаваемые Вопросы
URLPattern сопоставляет компонент search в URL, но обрабатывает его как необработанную строку. Для параметров запроса вроде ?page=2&sort=name, URLPattern может сопоставлять паттерны со строкой search, но вам всё равно понадобится URLSearchParams для парсинга отдельных пар ключ-значение после сопоставления.
Да. Вы можете сделать сегменты опциональными, используя модификатор вопросительного знака. Например, /users/:id? сопоставляет как /users, так и /users/123. Именованная группа будет undefined, когда опциональный сегмент отсутствует в URL.
По умолчанию URLPattern считает завершающие слеши значимыми. Паттерн для /users/:id не будет сопоставлять /users/123/ с завершающим слешем. Чтобы сопоставить оба варианта, используйте паттерн с опциональным завершающим слешем вроде /users/:id/ с соответствующими модификаторами или создайте паттерны для обоих вариантов.
Да. Пакет urlpattern-polyfill предоставляет поддержку URLPattern для браузеров и версий Node.js, в которых отсутствует нативная реализация. Импортируйте его условно на основе определения возможностей, чтобы избежать загрузки ненужного кода в средах с нативной поддержкой.
Understand every bug
Uncover frustrations, understand bugs and fix slowdowns like never before with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.