Javascript正则表达式从每个换行条目中捕获多行内容

标签 javascript regex multiline capturing-group

我正在使用 Javascript Regex 来处理一些原始数据并将其转换为二维数组。

任务简报(仅限 JS):

将原始字符串数据转换为二维数组。

原始数据输入:

这是一个包含 4 个条目的示例,新条目将转到换行符。条目 3 带有多行内容。

2012/12/1, AM12:21 - user1‬: entry1_wasehhjdsaj

2012/12/2, AM9:42 - user2‬: entry2_bahbahbah_dsdeead

2012/12/2, AM9:44 - user3‬: entry3_Line1_ContdWithFollowingLine_bahbahbah

entry3_Line2_ContdWithABoveLine_bahbahbah_erererw

entry3_Line3_ContdWithABoveLine_bahbahbah_dsff

2012/12/4, AM11:48 - user7‬: entry4_bahbahbah_fggf

(原始字符串数据,没有空行。) 更新:抱歉造成误导,内容的结尾不必具有相同的 END 模式,而只需换行即可。

该模式实际上如何结束?(感谢@Tim Pietzcker 的评论)。 内容应以换行符结束,并以下一个条目时间戳开始。 (您可以假设条目内容不包含任何类似的时间戳模式。)

我知道这可能是一个麻烦的正则表达式问题,因此任何其他实现相同目标的 JS 方法也将被接受。

我当前的正则表达式与捕获组:

/^([0-9]{4}|[0-9]{2})[\/]([0]?[1-9]|[1][0-2])[\/]([0]?[1-9]|[1|2][0-9]|[3][0|1]), ([A|P])M([1-9]|1[0-2]):([0-5]\d) - (.*?): (.*)/gm

期望的捕获结果:

匹配 1

  1. 2012
  2. 12
  3. 1
  4. A
  5. 12
  6. 21
  7. 用户1
  8. entry1_wasehhjdsaj

比赛 2

  1. 2012
  2. 12
  3. 2
  4. A
  5. 9
  6. 42
  7. 用户2
  8. entry2_bahbahbah_dsdeead

第三场比赛

  1. 2012
  2. 12
  3. 2
  4. A
  5. 9
  6. 44
  7. 用户3
  8. entry3_Line1_ContdWithFollowingLine_bahbahbahentry3_Line2_ContdWithABoveLine_bahbahbah_erererwentry3_Line3_ContdWithABoveLine_bahbahbah_dsff

比赛 4

(已跳过...)


问题:

捕获条目 3 时出现问题,无法捕获条目 3 的第 2 行和第 3 行内容。如果该条目仅包含一行内容,则正则表达式工作正常。

如何捕获具有多行内容的条目 3? 我尝试使用 m 修饰符,但我不知道如何同时处理多行内容和换行符条目.

如果用js正则表达式无法实现,请建议另一种js方法将原始数据转换为二维数组作为最终目标。

谢谢!

enter image description here 内容的结尾不必具有相同的 END 模式,而只需换行即可。

测试:https://regex101.com/r/eS9pY5/1

最佳答案

多行在 JavaScript 中不能以这种方式工作,但您可以使用 [\s\S] 解决它。这个类也匹配每个字符和\n。请注意后面的 *? 而不是 *,以防止它贪婪并只执行到第一个 END:

^([0-9]{4}|[0-9]{2})[\/]([0]?[1-9]|[1][0-2])[\/]([0]?[1-9]|[1|2][0-9]|[3][0|1]), ([A|P])M([1-9]|1[0-2]):([0-5]\d) - (.*?): ([\s\S]*?END)$

参见:https://regex101.com/r/mT8rI4/3

关于Javascript正则表达式从每个换行条目中捕获多行内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35113895/

相关文章:

javascript - JS从django模板标签获取数据

python - 如何在保留括号的同时拆分字符串

Ruby split 在字符串之前保留分隔符

ant - 使用 ant 获取 list 文件的条目

javascript - 如何在 HTML 中上传之前预览图像?

javascript - 如何将初始页面的 url 保存为 js 中的变量并在提交表单后使用它?

Java 正则表达式组 OR 运算符

wpf - 具有自动垂直滚动功能的多行文本框

regex - 你如何在eclipse中用点(DOTALL)匹配多行查找正则表达式

javascript - RxJS 缓冲区或缓冲区大小限制