Сопоставление маршрута
Условие
matchRoute(pattern, path): '/users/:id/posts/:postId' против '/users/7/posts/3' даёт { id: '7', postId: '3' }. Несовпадение - null. Поддержи хвост '*' как catch-all в поле rest.
Что проверяют тесты
извлекает параметры
статический маршрут
несовпадение
лишний сегмент не подходит
не хватает сегмента
хвост
строка запроса отбрасывается
параметр декодируется
Как подойти
Ядро любого клиентского роутера. Три границы, которые забывают: длины должны совпадать (иначе лишние сегменты проходят), строка запроса не часть пути, значения параметров приходят закодированными. Реальные роутеры компилируют шаблон в регулярку один раз и кешируют - при сотне маршрутов это заметно.
Подсказки: 3
- Режь на сегменты и сравнивай попарно.
- Проверка совпадения длин обязательна, иначе '/users/1/extra' пройдёт.
- Строку запроса надо отрезать до сравнения.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.