用正则表达式连续收集单词数组中的任意单词
Regex to gather any word in array of words continuously
我有一些带有一系列关键字的文本。
,
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
- 将带有多维数组的表单从Javascript提交到PHP
- 添加和删除隐藏字段数组中的值,而不提交表单
- 使用Web Html表单创建Javascript数组
- 如何将JS数组添加到Meteor自动表单条目中
- 单击select'时将数组行回显到文本区域中;s选项
- JQuery:如何在每次单击时逐个显示段落标签数组
- 使用JavaScript获取数组中表单的所有控件
- 如何确定$(this)是否在单击事件的数组中
- 将一个对象转换为一个单键对象数组(带下划线?)
- 如何在不使用jQuery的情况下设置数组以获取单选按钮值
- 你能提交一个带有文本输入数组的表单吗
- 使用 JQuery 从表单中获取 javascript 多维数组
- 通过动态创建数组名称在单击函数中引用 javascript 数组
- 单击时显示关联数组的元素
- 挖空 JS - 单击数组中的图像
- 尝试从单选按钮显示的JSON数组中调用多个对象
- ng单击从内部数组中删除项
- 对任意对象数组进行排序
- 在MemoryStore(或任意数据数组)中排序数据
- 提取任意给定数组中的所有数字,然后将它们全部相加