gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 21:34:55 26 4
gpt4 key购买 nike

我正在使用 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. user1
  8. entry1_wasehhjdsaj

第 2 场比赛

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

第 3 场比赛

  1. 2012
  2. 12
  3. 2
  4. A
  5. 9
  6. 44
  7. user3
  8. entry3_Line1_ContdWithFollowingLine_bahbahbah entry3_Line2_ContdWithABoveLine_bahbahbah_erererw entry3_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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com