Код Senior Реализация с нуля обновлено

Сопоставление маршрута

Условие

matchRoute(pattern, path): '/users/:id/posts/:postId' против '/users/7/posts/3' даёт { id: '7', postId: '3' }. Несовпадение - null. Поддержи хвост '*' как catch-all в поле rest.

Что проверяют тесты

  • извлекает параметры

  • статический маршрут

  • несовпадение

  • лишний сегмент не подходит

  • не хватает сегмента

  • хвост

  • строка запроса отбрасывается

  • параметр декодируется

Как подойти

Ядро любого клиентского роутера. Три границы, которые забывают: длины должны совпадать (иначе лишние сегменты проходят), строка запроса не часть пути, значения параметров приходят закодированными. Реальные роутеры компилируют шаблон в регулярку один раз и кешируют - при сотне маршрутов это заметно.

Подсказки: 3
  1. Режь на сегменты и сравнивай попарно.
  2. Проверка совпадения длин обязательна, иначе '/users/1/extra' пройдёт.
  3. Строку запроса надо отрезать до сравнения.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.