javascript - 正则表达式javascript拆分

标签 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):

["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." ];

我当前的正则表达式是:

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 上拆分,因为它们不一致,有时可能根本没有换行符。

你能帮我用正则表达式解决这个问题吗?

非常感谢!!

编辑:回复 phleet

它可能看起来像这样:

9:30 pm
The user did action A.

He also did action B

10:30 pm Welcome, user John Doe.

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

最佳答案

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

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

使用

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

(?:___) 就是所谓的非捕获组。

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

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

引用资料


要点

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

引用资料

关于javascript - 正则表达式javascript拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3067897/

相关文章:

javascript - 分割函数的结果是每次给我一个字符而不是单词

javascript - 当我在 vue.js 中更改路线或无需重新加载页面手册时重新渲染 v-for 的最佳方法

用 C 计算标量积和字符串操作

r - 如何为非重复行创建唯一标识符?

regex - 使用 VBS 替换两个文件之间的变量值

regex - 将 2 个单词的字符串拆分为单独的单词 [但有时字符串中只有单词...]

php - 使用正则表达式和 PHP 将段落拆分为句子

javascript - Facebook 点赞按钮仅加载一次

javascript - jQuery 事件监听器

javascript - Select2 过滤器不起作用