javascript - 正则表达式:在正则表达式中查找一个组与第二组和边界的多次出现
问题描述
例如:
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
解决方案
你不能用一个正则表达式匹配操作来做到这一点。您需要首先使用一个捕获组获取年份,然后将所有包含所有月份数据的文本捕获到第 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);
}