这是我的输入内容:
start
@var=somevar1
@var=somevar2
end
我正在使用此正则表达式
start(?:\s*\n*(?:@var=(.*)\s*)*)\s*\n*end
它的输出应为
somevar1
somevar2
但它只给出somevar2。
有什么办法可以使捕获组全部出现吗?
答案 0 :(得分:1)
一种选择是在正后面加上一个inifite量词来断言start,然后在左边换行。
(?<=^start\n[^]*@var=)\S+(?=[^]*\nend$)
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