【发布时间】:2016-01-31 12:36:12
【问题描述】:
我正在使用 Javascript Regex 来处理一些原始数据并将其转换为二维数组。
任务简报(仅限 JS):
将原始字符串数据转换为二维数组。
原始数据输入:
这是一个包含 4 个条目的示例,新条目将转到换行符。条目 3 带有多行内容。
2012/12/1,上午 12:21 - 用户 1:entry1_wasehhjdsaj
2012/12/2,AM9:42 - 用户 2:entry2_bahbahbah_dsdeead
2012/12/2,AM9:44 - 用户 3:entry3_Line1_ContdWithFollowingLine_bahbahbah
entry3_Line2_ContdWithABoveLine_bahbahbah_erererw
entry3_Line3_ContdWithABoveLine_bahbahbah_dsff
2012/12/4,AM11:48 - 用户 7: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
想要的捕获结果:
第一场比赛
2012121A1221user1entry1_wasehhjdsaj
第 2 场
2012122A942user2entry2_bahbahbah_dsdeead
第 3 场比赛
2012122A944user3entry3_Line1_ContdWithFollowingLine_bahbahbah entry3_Line2_ContdWithABoveLine_bahbahbah_erererw entry3_Line3_ContdWithABoveLine_bahbahbah_dsff
第 4 场比赛
(被跳过...)
问题:
捕获Entry 3时出现问题,无法捕获Entry 3的第2行和第3行内容。如果该entry仅包含一行内容,则正则表达式可以正常工作。
如何捕获条目 3 的多行内容? 我尝试使用 m 修饰符,但我不知道如何同时处理多行内容和换行条目.
如果用js正则无法实现,请建议另一种js方法将原始数据转换为二维数组作为最终目标。
谢谢!
【问题讨论】:
标签: javascript regex multiline capturing-group