用正则表达式连续收集单词数组中的任意单词

Regex to gather any word in array of words continuously

本文关键字:任意单 数组 单词 正则表达式 连续      更新时间:2023-09-26

我有一些带有一系列关键字的文本。

,

Text: Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
FooKeyword: Foo
AnotherKeyword: Yay!

我需要能够匹配关键字以及所有的文本导致下一个关键字。

比如:

Match 1: 
Group[0] = FooKeyword
Group[1] = Foo

到目前为止,这是我所拥有的:

['s'S]?(Text:|FooKeyword:|AnotherKeyword:).*

在大多数情况下都有效,但问题是它不适用于新行。我需要收集每个关键字之间的所有内容。我该怎么做呢?

下面是我尝试过的一个例子:https://regex101.com/r/zkLoYZ/6

您可以试试:/(Keyword'd+): ?(.+?)(?='nKeyword|$)/gs

看它在这里工作:https://regex101.com/r/zkLoYZ/1.

[EDIT]添加说明:

  • s标志在这里非常重要,因为你想处理多行
  • 我把你的(Keyword1:|Keyword2:|Keyword3:)优化成(Keyword'd+)
  • 我通过在新行开始或字符串($)结束处存在下一个' Keyword '来检测每个部分
  • (?=something)是一个积极的前瞻性
  • (.+?)中,?表示懒惰,你可以在这里了解更多信息

[EDIT] after question EDIT .

所以如果你想要有不同的关键字,你可以保持相同的正则表达式模式,但用|分隔的先前生成的关键字列表替换(Keyword'd+),就像你实际做的那样。

所以在最坏的情况下,生成的/(Text|FooKeyword|AnotherKeyword): ?(.+?)(?='nText|FooKeyword|AnotherKeyword|$)/将像这样工作:https://regex101.com/r/zkLoYZ/4

现在你应该能够重用匹配与'1让我试试:实际上没有办法重用以前的捕获,因为关键字匹配下一个是不一样的刚刚通过和在regex内存。

所以(Text|FooKeyword|AnotherKeyword): ?(.+?)(?='n(Text|FooKeyword|AnotherKeyword)|$)是使用regex的最佳方式。


[EDIT] For JS

由于s标志不可用,正则表达式稍微复杂一些。

/(Project|Feature|Scenario|Given|When|Then|#Task): ?((?:'s|'w)+?)(?='n(?:Project|Feature|Scenario|Given|When|Then|#Task)|$)/gim

i标志不是强制性的,但我推荐它。

请看下面的例子:https://regex101.com/r/zkLoYZ/9