关键字后的 RegEx 分组
RegEx Grouping after keyword
我被正则表达式问题困住了。
示例文本
data-key=foo1,
data-key=foo2,
data-key=foo3,
BAR,
data-key=foo4,
asd
data-key=foo5,
asfda
data-key=foo6,
我现在想要单词 "BAR" 之后的所有数据键行。
期望的结果:
data-key=foo4,
data-key=foo5,
data-key=foo6,
这个 RegEx 会给出我想要的结果,但我不想指定数据键行出现了多少次,因为它可以是任何数字:
(?s)BAR.*(data-key.*?,).*(data-key.*?,).*(data-key.*?,)
有什么想法吗?
除非您出于理论上的原因提出这个问题,否则我建议您将输入拆分为 BAR
,然后对其后的所有内容执行正则表达式:
var str="data-key=foo1,\ndata-key=foo2,\ndata-key=foo3,\nBAR,\ndata-key=foo4,\nasd\ndata-key=foo5,\nasfda\ndata-key=foo6";
var regex = /(?:data-key=([^,]*))/ig;
var matches = Array.from(str.split("BAR,")[1].matchAll(regex));
console.log(matches);
这将为您提供所需的结果。
任何正则表达式风格至少支持 lookaheads 以检查 BAR
不领先。
(data-key[^,\n]*,).*(?![\s\S]*?\nBAR)
See this demo at regex101 (using a capturing group 提取逗号前的部分)
如果使用 PCRE,(*SKIP)(*F) 可以跳过某些部分。
(?m)(?s:\A.*?^BAR)(*SKIP)(*F)|^data-key.*?,
我被正则表达式问题困住了。 示例文本
data-key=foo1,
data-key=foo2,
data-key=foo3,
BAR,
data-key=foo4,
asd
data-key=foo5,
asfda
data-key=foo6,
我现在想要单词 "BAR" 之后的所有数据键行。 期望的结果:
data-key=foo4,
data-key=foo5,
data-key=foo6,
这个 RegEx 会给出我想要的结果,但我不想指定数据键行出现了多少次,因为它可以是任何数字:
(?s)BAR.*(data-key.*?,).*(data-key.*?,).*(data-key.*?,)
有什么想法吗?
除非您出于理论上的原因提出这个问题,否则我建议您将输入拆分为 BAR
,然后对其后的所有内容执行正则表达式:
var str="data-key=foo1,\ndata-key=foo2,\ndata-key=foo3,\nBAR,\ndata-key=foo4,\nasd\ndata-key=foo5,\nasfda\ndata-key=foo6";
var regex = /(?:data-key=([^,]*))/ig;
var matches = Array.from(str.split("BAR,")[1].matchAll(regex));
console.log(matches);
这将为您提供所需的结果。
任何正则表达式风格至少支持 lookaheads 以检查 BAR
不领先。
(data-key[^,\n]*,).*(?![\s\S]*?\nBAR)
See this demo at regex101 (using a capturing group 提取逗号前的部分)
如果使用 PCRE,(*SKIP)(*F) 可以跳过某些部分。
(?m)(?s:\A.*?^BAR)(*SKIP)(*F)|^data-key.*?,