簡體   English   中英

正則表達式匹配javascript中的uri段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM