Javascript Regex:从路径中提取变量

时间:2009-11-22 23:10:52

标签: javascript regex

尝试从路径中提取变量名称(变量以:开头,可选地由()括起来,变量的数量可能会有所不同

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

预期输出应为:

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

尝试了类似

的内容

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

但它不起作用(不知何故它捕获冒号并且没有可选的附件),如果有一些正则表达式图片,请帮忙。非常感谢提前!

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

这个怎么样:

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

匹配:

:firstVar
:(secondVar)
:thirdVar

$1包含:

firstVar
secondVar
thirdVar

答案 2 :(得分:0)

我可以建议您查看URI template specification吗?它完全符合您的要求,但更优雅。我不知道JavaScript的任何当前URI模板解析器,因为它通常是服务器端操作,但是最小的实现将是无关紧要的。

基本上,而不是:

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

您使用:

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

希望很明显,为什么这种格式在secondVar的情况下效果更好。此外,它具有作为规范的附加优势,尽管目前仍然是草案。