正则表达式:对以给定字符开头的所有字符串块进行分组

Regex: Group all blocks of strings starting with a given character

提问人:john 提问时间:10/22/2023 更新时间:10/22/2023 访问量:66

问:

我在 javascript 中有一个这样的文本

some text
- list
- list
- list
more text
- another list
- another list
- another list

如何匹配所有以该字符开头的行,直到一行不以该字符开头?
例如,根据上面的文本,我需要匹配两个组
-

- list
- list
- list

- another list
- another list
- another list

我尝试使用正则表达式,但仅当列表包含偶数个元素时才有效,而我需要它才能适用于任意数量的元素。/^(-.*\n-.*|$)/gm

javascript 则表达 式 正则表达式组

评论

3赞 The fourth bird 10/22/2023
你是说这样吗? 查看 regex101.com/r/amsfMj/1^-.*(?:\n-.*)*
0赞 Bernhard 10/22/2023
为什么要使用正则表达式?我只是循环遍历这些行并收集以某个字符开头的行,直到没有起始字符的行被击中。这在以后更容易理解。
0赞 anubhava 10/22/2023
@Thefourthbird:请发布解决方案

答:

4赞 The fourth bird 10/22/2023 #1

目前,您只匹配了 2 次连字符(偶数),并且您没有重复该匹配。

您可以匹配以连字符开头的单行,然后选择性地重复以下用换行符和连字符加星的行。

^-.*(?:\n-.*)*

正则表达式演示


使用捕获组的更广泛模式:

^[^-\s].*\n(-\s+[^\s-].*(?:\n-\s+[^\s-].*)*)

模式匹配:

  • 上一行上不以连字符开头的前导文本
  • 每个导引后有一个空格字符-
  • 至少一个非空格字符,而不是作为每个项目的值-

正则表达式演示