正则表达式javascript拆分

正则表达式javascript拆分,javascript,regex,split,Javascript,Regex,Split,我试图创建一个正则表达式javascript拆分,但我完全被卡住了。以下是我的意见: 9:30 pm The user did action A. 10:30 pm Welcome, user John Doe. ***This is a comment 11:30 am This is some more input. 我希望split()之后的输出数组是(为了可读性,我删除了\n): 我当前的正则表达式是: var split = text.split(/\s*(?=(\b\d+:\

我试图创建一个正则表达式javascript拆分,但我完全被卡住了。以下是我的意见:

9:30 pm
The user did action A.

10:30 pm
Welcome, user John Doe.

***This is a comment

11:30 am
This is some more input.
我希望split()之后的输出数组是(为了可读性,我删除了
\n
):

我当前的正则表达式是:

var split = text.split(/\s*(?=(\b\d+:\d+|\*\*\*))/);
这是可行的,但有一个问题:时间戳会在额外的元素中重复。所以我得到:

["9:30", "9:30 pm The user did action A.", "10:30",  "10:30 pm Welcome, user John Doe.", "***This is a comment", "11:30", "11:30 am This is some more input." ];
我无法拆分换行符
\n
,因为它们不一致,有时可能根本没有换行符

你能帮我弄个正则表达式吗

非常感谢

编辑:回复弗雷特

它可能是这样的:

9:30 pm
The user did action A.

He also did action B

10:30 pm Welcome, user John Doe.

基本上,时间戳后可能有或可能没有换行符,事件描述可能有多个换行符。

我认为问题在于Javascript的
拆分
如何处理捕获组。解决方案可能只是在模式中使用非捕获组。也就是说,而不是:

/\s*(?=(\b\d+:\d+|\*\*\*))/
使用

(?:________;)是所谓的非捕获组

然而,从整体模式来看,实际上并不需要分组。您应该能够只使用:

/\s*(?=\b\d+:\d+|\*\*\*)/
工具书类

小结 您可以使用
[*]{3}
而不是
\*\*\*\*
。这可能更具可读性。
*
不是字符类定义中的元字符,因此它不必转义。
{3}
是您表示“恰好3次重复”的方式

工具书类

你能提供你所说的那种没有换行符的输入吗?你是说没有空行,还是没有新行?太棒了,非常感谢!这完全解决了问题。
/\s*(?=(?:\b\d+:\d+|\*\*\*))/
        ^^
/\s*(?=\b\d+:\d+|\*\*\*)/