Navigo — это лёгкий клиентский роутер для JavaScript, который позволяет управлять навигацией в одностраничных приложениях (SPA). Один из самых мощных инструментов Navigo — поддержка регулярных выражений в определении маршрутов, что даёт гибкость в обработке сложных URL и динамических сегментов пути.
В Navigo путь маршрута может содержать динамические
параметры, которые задаются через двоеточие : или
через фигурные скобки {}. Для расширенной фильтрации этих
параметров можно использовать регулярные выражения, заключая их после
двоеточия.
Пример базового динамического параметра:
const router = new Navigo("/");
router.on("/user/:id", (params) => {
console.log(params.id);
});
Здесь :id захватывает любой сегмент URL, который следует
после /user/. Если требуется ограничить формат значения,
применяется регулярное выражение.
Регулярные выражения позволяют ограничить допустимые значения
параметра, например, чтобы параметр id состоял
только из цифр:
router.on("/user/:id(\\d+)", (params) => {
console.log("Цифровой ID:", params.id);
});
Разбор конструкции:
:id — имя параметра.(\\d+) — регулярное выражение, соответствующее одной
или более цифрам.\\ нужен для экранирования символа в
строке JavaScript.Пример работы:
router.navigate("/user/123"); // params.id = "123"
router.navigate("/user/abc"); // маршрут не сработает
В Navigo можно одновременно использовать несколько параметров с собственными регулярными выражениями:
router.on("/post/:year(\\d{4})/:month(\\d{2})/:slug([a-z0-9\\-]+)", (params) => {
console.log(params.year, params.month, params.slug);
});
Объяснение:
:year(\\d{4}) — четыре цифры для года.:month(\\d{2}) — две цифры для месяца.:slug([a-z0-9\\-]+) — текстовый сегмент, содержащий
только строчные буквы, цифры и дефисы.Такой маршрут подходит для URL вида:
/post/2026/03/example-post
Регулярные выражения позволяют создавать маршруты с
необязательными параметрами через ?:
router.on("/archive/:year(\\d{4})/:month(\\d{2})?", (params) => {
console.log(params.year, params.month);
});
:month(\\d{2})? делает параметр month
необязательным./archive/2026 будет корректно обработан, а
params.month будет undefined./archive/2026/03 вернёт оба параметра.Можно применять регулярные выражения для ограничения параметра на конкретные значения:
router.on("/color/:name(red|green|blue)", (params) => {
console.log("Выбран цвет:", params.name);
});
red, green или blue
будут соответствовать маршруту./color/yellow, будет
игнорироваться.\d становится \\d.Использование регулярных выражений особенно полезно в следующих случаях:
/page/:num(\\d+))/product/:type(electronics|clothes|books))/blog/:slug([a-z0-9\\-]+))Такой подход делает маршрутизацию чёткой и предсказуемой, предотвращает ошибки при неправильных URL и упрощает логику обработки в обработчиках.
| Без регулярного выражения | С регулярным выражением |
|---|---|
:id захватывает всё подряд |
:id(\\d+) захватывает только цифры |
| Возможны ошибки при неверных URL | Только корректные URL проходят проверку |
| Обработка внутри обработчика | Ошибка блокируется до вызова обработчика |
Использование регулярных выражений в путях Navigo повышает надёжность маршрутов и облегчает поддержку масштабных SPA с большим количеством динамических сегментов.