[英]Regular expression to match uri segment in javascript
我正在開發一個用於客戶端MVC應用程序的JavaScript路由器引擎......涉及Backbone或Spine。
我的路由器需要匹配可選地包含資源標題的URI段,並且可選地包括請求格式。
我正在尋找捕獲資源:id
,可選:name
段和可選:format
段,這樣:
/123 => id:'123', name: undefined, format: undefined
/123-my-name => id:'123', name:'my-name', format: undefined
/123.html => id:'123', name: undefined, format:'html'
/123-my-name.html => id:'123', name:'my-name', format:'html'
編輯:有其他路徑將匹配嵌套路徑,因此該表達式不應匹配/123-my-name/edit
或/123-my-name/edit.html
我可以很容易地匹配可選的:name
或:format
段,當它們不存在時,但是我無法區分:name
和:format
兩者都存在。
有什么建議么?
> re = /\/(\w+)(?:-(\w[-\w]+))?(?:\.(html))?/
/\/(\w+)(?:-(\w[-\w]+))?(?:\.(html))?/
> "/123".match(re)
["/123", "123", undefined, undefined]
> "/123-my-name".match(re)
["/123-my-name", "123", "my-name", undefined]
> "/123.html".match(re)
["/123.html", "123", undefined, "html"]
> "/123-my-name.html".match(re)
["/123-my-name.html", "123", "my-name", "html"]
然后,
m = url.match(re)
id = m[1]
name = m[2] || default
format = m[3] || default
更具體的選項(id =僅數字,錨定):
> re = /^\/(\d+)(?:-(\w[-\w]+))?(?:\.(html))?$/
/^\/(\d+)(?:-(\w[-\w]+))?(?:\.(html))?$/
> "/123-my-route/edit.html".match(re)
null
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.