首页 > 解决方案 > 正则表达式:在正则表达式中查找一个组与第二组和边界的多次出现

问题描述

例如:

foo for 2019:

month value
    3   101
    4   202
    5   303

bar for xyz

是否可以仅通过一个正则表达式规则获得所有月份和年份?

为了得到最后一个月,我会使用: /foo\sfor\s(?<year>20\d\d)[^]+\n+\s*(?<month>\d+)\s[^]+bar\sfor/gm

目标平台:nodeJS

标签: javascriptregex

解决方案


你不能用一个正则表达式匹配操作来做到这一点。您需要首先使用一个捕获组获取年份,然后将所有包含所有月份数据的文本捕获到第 2 组中,然后对第 2 组值运行另一个正则表达式,仅分别获取所有月份编号。

您可以使用

var text = "foo for 2019:\n\nmonth value\n    3   101\n    4   202\n    5   303\n\nbar for xyz";
var match = /foo\sfor\s(20\d\d):([^]+?)bar\sfor/.exec(text);
if (match) {
    console.log("Year: ", match[1]);
    var months = match[2].match(/\d+(?=[ \t]+\d)/gm);
    console.log("Months: ", months);
}


推荐阅读