正则表达式以匹配javascript中的uri段
我正在为客户端MVC应用程序开发JavaScript路由器引擎。。。像脊骨或脊柱之类的东西也被累及了 我的路由器需要匹配URI段,这些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
: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