正则表达式捕获组仅捕获最后一次出现

时间:2020-08-27 14:52:24

标签: javascript regex regex-group regex-greedy

这是我的输入内容:

start

        @var=somevar1
        @var=somevar2

end

我正在使用此正则表达式

start(?:\s*\n*(?:@var=(.*)\s*)*)\s*\n*end

它的输出应为

somevar1
somevar2

但它只给出somevar2。

有什么办法可以使捕获组全部出现吗?

1 个答案:

答案 0 :(得分:1)

一种选择是在正后面加上一个inifite量词来断言start,然后在左边换行。

请参见support for lookbehinds

(?<=^start\n[^]*@var=)\S+(?=[^]*\nend$)

Regex demo

const regex = /(?<=^start\n[^]*@var=)\S+(?=[^]*\nend$)/gm;
const str = `start

        @var=somevar1
        @var=somevar2

end`;
let m;

console.log(str.match(regex));

如果前后只能有@ var = somevar的格式,而不是其他内容:

(?<=^start\n\s*(?:@var=\S+\s+)*@var=)\S+(?=(?:\s*@var=\S+)*\s*\nend$)

查看其他regex demo

相关问题