尝试从路径中提取变量名称(变量以:开头,可选地由()括起来,变量的数量可能会有所不同
“富/酒吧/:firstVar / :( secondVar)foo2的/:thirdVar”
预期输出应为:
['firstVar','secondVar','thirdVar']
尝试了类似
的内容 "foo/bar/:firstVar/:(secondVar)foo2/:thirdVar".match(/\:([^/:]\w+)/g)
但它不起作用(不知何故它捕获冒号并且没有可选的附件),如果有一些正则表达式图片,请帮忙。非常感谢提前!
答案 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
的情况下效果更好。此外,它具有作为规范的附加优势,尽管目前仍然是草案。