javascript - 如何使用 javascript 正则表达式多次捕获多个组

标签 javascript regex

我有这个代码片段,旨在从 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/

相关文章:

java - 考虑捕获组中的空白

regex - 统计 SAS 中正则表达式匹配者的数量

javascript - 在 ChartJS 的工具提示中计算值

javascript - ListBox 项目在 jQuery 中被空数组替换后仍然存在

javascript - 将鼠标悬停在不同位置的另一个 div 上时更改一个 div 的内容

javascript - 使用简写字符类的正则表达式

Ruby Regexp gsub,替换第二个匹配字符的实例

javascript - "range"输入定义中的 AngularJS 表达式

javascript - JAVA 使用 Selenium 时如何禁用 Javascript?

php - pre_replace 一个字符串以将下划线后面的每个单词大写