JavaScript在不丢失字符的情况下拆分

JavaScript在不丢失字符的情况下拆分,javascript,regex,split,Javascript,Regex,Split,我想使用JavaScript分割某些文本。文本如下所示: 9:30 pm The user did action A. 10:30 pm Welcome, user John Doe. 11:30 am Messaged user John Doe 现在,我想将字符串拆分为事件。i、 e: 9:30 pm The user did action A. 这将是一件大事。我使用正则表达式来实现以下目的: var split = journals.split(/\d*\d:/); 问题是,前

我想使用JavaScript分割某些文本。文本如下所示:

9:30 pm
The user did action A.

10:30 pm
Welcome, user John Doe.

11:30 am
Messaged user John Doe
现在,我想将字符串拆分为事件。i、 e:

9:30 pm
The user did action A.
这将是一件大事。我使用正则表达式来实现以下目的:

var split = journals.split(/\d*\d:/);
问题是,前两个角色都迷路了。拆分如下所示:

30 pm
    The user did action A.
如何拆分,以使拆分保持前两个/三个字符(即9:10:)等


谢谢

在换行线上拆分不是更容易吗

var split = journals.split(/\n\n/);
编辑

尝试将字符串规范化为可以使用的格式:

/*
 Non-normalized string
*/
var str = "9:30 pm\nThe user did action A.10:30 pm\nWelcome, user John Doe.\n\n\n11:30 am\nMessaged user John Doe\n12:30 pm\nThe user did something else.";

/*
 Normalizing into a specific format. TIMESTAMP\nDESCRIPTION\n\n.
 Then removing extraneous leading \n\n
*/

str = str.replace(/\n*([0-9]{1,2}:[0-9]{2} (a|p)m)\n*/g, "\n\n$1\n").replace(/^\n+/, "");

var events = str.split(/\n\n/);

/*
 The following should display an array of strings of the form:
 TIMESTAMP\nDESCRIPTION
*/
console.log(events); 

/*
 Loop through events and split on single newline to get timestamp and description
*/
for(var i = 0; i < events.length; i++) {
   var event = events[i];
   var eventData = event.split(/\n/);
   var time = eventData[0];
   var description = eventData[1];
   console.log(time, description);
}
/*
非规范化字符串
*/
var str=“9:30 pm\n用户执行了操作A.10:30 pm\n欢迎用户John Doe。\n\n\n11:30 am\n消息用户John Doe\n12:30 pm\n用户执行了其他操作。”;
/*
规范化为特定格式。时间戳\n说明\n\n。
然后删除无关的前导\n\n
*/
str=str.replace(/\n*([0-9]{1,2}:[0-9]{2}(a | p)m)\n*/g,“\n\n$1\n”)。replace(/^\n+/,”);
var events=str.split(/\n\n/);
/*
以下内容应显示表单的字符串数组:
时间戳\n说明
*/
console.log(事件);
/*
循环事件并在单个换行符上拆分,以获得时间戳和描述
*/
对于(var i=0;i
使用前瞻:

var split = journals.split(/(?=\b\d+:)/);

你有什么理由不想在双倍换行线上分手吗?是的,请看对Vivin答案的回复。是的。有时有一个额外的换行,有时没有换行,有时用户删除换行。不幸的是,这不是一个选项。谢谢你的编辑。问题是,输入字符串本身并不能保证在正确的位置\n有字符。@Rohan正则表达式确保它在适当的位置插入
\n
(它寻找类似时间戳的模式,该模式可以由0个或多个
\n
开头和/或结尾)。但我认为你应该接受安迪的解决方案。容易多了,你测试过了吗?这是我第一次测试,但让我吃惊的是,它在<代码> \d*<代码>和<代码> \d>代码>之间分叉。@ BaluSc:不,我有点着急(我正在做晚饭)。在使用lookaheads之前,我已经对“非字符”进行了拆分。这确实有效。非常感谢!(可能的错误可能是我的初始正则表达式不完美,我后来添加了最后一个\d*。@BalusC,@Rohan:用单词bounder
\b
Drat修复了正则表达式,我知道。很好,安迪:)