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

Regex capturing group only capturing last occurence

这是我的输入:

start

        @var=somevar1
        @var=somevar2

end

我正在使用这个正则表达式

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

它的输出应该是

somevar1
somevar2

但它只给出了一些 var2。

有什么办法可以得到捕获组的所有出现吗?

一个选项是使用带有无限量词的正后视来断言开始,然后在左侧换行。

参见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