Мне нужна помощь в построении некоторых маршрутов, у меня есть следующая схема маршрутов,
(def my-routes
["/" {"" :home
"info" :info
"posts/" {"" :all-posts
[#"\d+" :tag-name] :post-by-tag
[#"\w+" :post-name] :post-by-name}}])
, но когда я делаю некоторые тесты, кажется, что есть проблема с регулярным выражением.Например:
;; testing the tag route
(match-route my-routes "/posts/213")
;; => {:route-params {:tag-name "3"}, :handler :post-by-tag}
;; testing the name route
(match-route my-routes "/posts/the-first-post")
;; => {:route-params {:post-name "-first-post"} ,
:handler :post-by-name}
Таким образом, кажется, что обрезать часть после "/", и когда я делаю это вне биди при обычной проверке повторных совпадений, это выглядит нормально
(re-matches #"\d+" "213")
;; => "213"
;; I do see that this regex wouldn't pass the example I used above, but
;; the main matter is this weird behaviour seen in the routing.
(re-matches #"\w+" "post")
;; => "post"
Если бы кто-нибудь мог предоставить какое-нибудь регулярное выражение для разбора этих маршрутов, оно было бы очень признательно
Редактировать :
После замены регулярного выражения и попытки использовать его с match-route
кажется, только вернуть последнюю букву:
(use 'bidi.bidi)
;; => nil
(def my-routes
["/" {"" :home
"info" :info
"posts/" {"" :all-posts
[#"\d+" :tag-name] :post-by-tag
[#"[\w\-]+" :post-name] :post-by-name}
}]
)
;; => #'user/my-routes
(match-route my-routes "/posts/the-first-post")
;; => {:route-params {:post-name "t"}, :handler :post-by-name}