Обновление:
Версия path-to-regexp
, используемая Vue Маршрутизатор - 1.7.0 ... i sh. Точный способ, которым это затягивается, сложен, но я считаю, что 1.7.0 дает лучшее совпадение.
Имея это в виду, я придумал следующее:
path: '/category/:category([0-9]+)/:post([-+]?[0-9]*\\.?[0-9]+)',
Это немного отличается от мой первоначальный ответ, но его также можно протестировать с помощью сайта тестирования, о котором я упоминал, если вы измените версию на 1.7.0.
Я проверил это с Vue Router, и мне показалось, что он работает. Я не тестировал его с Nuxt.
Здесь уловка в том, что он не делает особый случай для целых чисел, они автоматически сопоставляются, делая точку необязательной. Это избавляет от некоторых специальных символов с пути, оставляя меньше возможностей для этого, чтобы отвратиться от безумия path-to-regexp
.
Оригинальный ответ:
Я немного поэкспериментировал с использованием Express Route Tester, который, как мне кажется, использует ту же библиотеку path-to-regexp
, что и Vue -Router / Nuxt:
https://forbeslindesay.github.io/express-route-tester/
Мне показалось, что это сработало:
/category/:category(\d+)/:post([-+]?(\d{0,}.\d+|\d+))
Изменения:
- Удалены лишние косые черты.
- Удалены обратная коса sh перед точкой.
- Изменено
*
на {0,}
, в противном случае оно преобразуется в .*
, и такие вещи, как 12xxx.34
будут совпадать. - Изменено
[0-9]
на \d
. Либо хорошо, и если вам нужно записать это как строку, может быть проще использовать [0-9]
, чтобы уклониться от побега sla sh. Что бы вы ни выбрали, будьте последовательны.