正则表达式:给定一个多行字符串,如何匹配位于每行开头的指定字符串之后包含的文本?

regex: given a multiline string, how to match the text included after a specified string positioned at the beginning of each line?

鉴于此多行文本:

abc aaa
bbb abc ccc
abc ddd eee
fff abc

我想匹配每行开头的 abc 单词 作为第一个匹配组 ,其余文本 之前next abc 定位在行首。

所以,这是预期的结果匹配:

Match 1
Full match  `abc aaa
bbb abc ccc`

Group 1.    `abc`
Group 2.    ` aaa
            bbb abc ccc`

Match 2
Full match  `abc ddd eee
fff abc`

Group 1.    `abc`
Group 2.    ` ddd eee
            fff abc`

我试过这个正则表达式(带有多行选项):

/^(abc)([\w\s]+)/gm

但是结果是错误的,因为它总共占用了文本:

Match 1
Full match  `abc aaa
bbb abc ccc
abc ddd eee
fff abc`

Group 1.    `abc`
Group 2.    ` aaa
bbb abc ccc
abc ddd eee
fff abc`

如何更正我的正则表达式以获得预期的结果?

注意单词 "abc" 也可以与字符串的其余部分 "internal segment" 进行比较。

提前致谢。

使用

/^(abc\b)(.*(?:\r?\n(?!abc\b).*)*)/gm

regex demo

详情:

  • ^ - 行首
  • (abc\b) - 一个完整的单词abc(如果你不需要一个完整的单词,请删除\b
  • (.*(?:\r?\n(?!abc\b).*)*) - 第 2 组捕获
    • .* - 以 abc
    • 开头的行的其余部分
    • (?:\r?\n(?!abc\b).*)* - 0+ 个序列:
      • \r?\n(?!abc\b) - 换行符后面没有跟 abc
      • .* - 当前行的剩余部分。