我看过很多关于匹配/替换路径的帖子,如:
/login/:id/:name
但是,我试图弄清楚如何返回一个只包含params名称的数组; id
,name
我让Regex失望了:/:[^\s/]+/g, "([\\w-]+)"
只是在比赛中挣扎。
答案 0 :(得分:1)
你需要循环,因为match
不会抓取全局正则表达式中的捕获组,所以你最终会得到一些你不需要的额外字符:
var url = '/login/:id/:name';
var res = [];
url.replace(/:(\w+)/g, function(_, match) {
res.push(match);
});
console.log(res); //=> ["id", "name"]
您也可以使用此助手:
String.prototype.gmatch = function(regex) {
var result = [];
this.replace(regex, function() {
var matches = [].slice.call(arguments, 1, -2);
result.push.apply(result, matches);
});
return result;
};
var res = url.gmatch(/:(\w+)/g); //=> ["id", "name"]