的Javascript正则表达式:从路径

问题描述:

试图从路径提取的变量名提取变量(变量之前包含:任选地被封闭的()),变量的数量可以变化的Javascript正则表达式:从路径

“富/酒吧/:firstVar /: (secondVar)foo2的/:thirdVar”

预期输出应为:

[ 'firstVar', 'secondVar', 'thirdVar']

试图像

"foo/bar/:firstVar/:(secondVar)foo2/:thirdVar".match(/\:([^/:]\w+)/g)

但它不工作(不知何故它捕获冒号&没有可选附件),如果有一些正则表达式法师,请帮助。提前感谢!

+0

你到底想要捕捉什么?你能告诉我们你期望的结果吗? – 2009-11-22 23:19:56

+0

这些是字符串,所以不太明白你的意思是换行 – pentarim 2009-11-22 23:21:43

+0

我很困惑这个问题。你为什么想做这个?为什么网址看起来如此严重?你为什么不从一个查询段中提取变量? – Breton 2009-11-22 23:45:47

var path = "foo/bar/:firstVar/:(secondVar)foo2/:thirdVar"; 

var matches = []; 
path.replace(/:\(?(\w+)\)?/g, function(a, b){ 
    matches.push(b) 
}); 

matches; // ["firstVar", "secondVar", "thirdVar"] 
+0

非常感谢你 – pentarim 2009-11-22 23:27:14

这个怎么样:

/\:\(?([A-Za-z0-9_\-]+)\)?/ 

比赛:

:firstVar 
:(secondVar) 
:thirdVar 

$1包含:

firstVar 
secondVar 
thirdVar 

我可能会建议你看看URI template specification?它完全符合你想要做的,但更优雅。我不知道任何当前用于JavaScript的URI模板解析器,因为它通常是一个服务器端操作,但是最小的实现将是微不足道的。

,而不是本质上说,:

foo/bar/:firstVar/:(secondVar)foo2/:thirdVar 

您使用:

foo/bar/{firstVar}/{secondVar}foo2/{thirdVar} 

希望,这是很显而易见的,为什么这种格式工程的secondVar的情况要好。另外它还有一个额外的优点,即成为一个规范,尽管目前仍然是一个草案。

+0

感谢您的信息,但通过格式绑定(其Horde_Routes语法) – pentarim 2009-11-22 23:41:32

+1

啊,是的。另一个项目感染了Rails式的路由。哦,值得一试。 – 2009-11-23 04:21:23