正则表达式以匹配javascript中的uri段

正则表达式以匹配javascript中的uri段,javascript,regex,Javascript,Regex,我正在为客户端MVC应用程序开发JavaScript路由器引擎。。。像脊骨或脊柱之类的东西也被累及了 我的路由器需要匹配URI段,这些URI段可以选择包含资源标题,也可以选择包含请求格式 我希望捕获资源:id、可选:name段和可选:format段,以便: /123 => id:'123', name: undefined, format: undefined /123-my-name => id:'123', name:'my-name', f

我正在为客户端MVC应用程序开发JavaScript路由器引擎。。。像脊骨或脊柱之类的东西也被累及了

我的路由器需要匹配URI段,这些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'
EDIT:还有其他路由将匹配嵌套路径,因此此表达式不应匹配
/123我的名字/EDIT
/123我的名字/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"]
那么

更具体的选项(id=仅数字,锚定):


请发布到目前为止您拥有的表达式。这是我拥有的表达式,但它不能按预期工作:
/^\/(\d+)(-(.*)?(?:\(html))?$/
除非测试嵌套路径,例如
/123 my route/edit.html
。有什么建议吗?嵌套路径不应导致匹配。更具体的锚定选项符合我的要求,谢谢!
 m = url.match(re)
 id = m[1]
 name = m[2] || default
 format = m[3] || default
> re = /^\/(\d+)(?:-(\w[-\w]+))?(?:\.(html))?$/
/^\/(\d+)(?:-(\w[-\w]+))?(?:\.(html))?$/
> "/123-my-route/edit.html".match(re)
null