我有这个代码片段,旨在从 github api 中提取下一个和最后一个链接值...
var types = {},
str = '<https://api.github.com/repositories/1424470/issues?access_token=f554f90b4c95c78091a4202150d4583082dab1ce&page=2>; rel="next", <https://api.github.com/repositories/1424470/issues?access_token=f554f90b4c95c78091a4202150d4583082dab1ce&page=7>; rel="last"',
rex = /\s*<https?:\/\/api.github.com\/.+?&page=(\d+)>;\s*rel="(\w+?)"(?:,|$)/g;
// use regex replace method to capture multiple groups multiple times
str.replace(rex, function(_, page, type){
types[type] = +page;
});
console.log(types);
// {next: 2, last: 7}
它运行正常,但感觉像是误用了正则表达式替换方法,我没有返回任何内容,而只是为了对每个匹配进行回调而使用它,我用它来构建输出对象。
我更喜欢某种 matchAll,返回匹配的多维数组和部分。
在 JavaScript 中是否有更好的方法来处理这种情况?
最佳答案
您可以使用exec()
方法在循环中,将匹配结果推送到多维数组。
function find_all(re, s) {
var types = [];
while (m = re.exec(s)) {
types.push([m[2], m[1]])
}
return types;
}
var regex = new RegExp('<https?://[^>]+page=(\\d+)>;\\s*rel="([^"]+)"', 'gi');
find_all(regex, str) //=> [ [ 'next', '2' ], [ 'last', '7' ] ]
关于javascript - 如何使用 javascript 正则表达式多次捕获多个组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31766869/