Javascript JS:将条目与捕获组进行匹配,以计算新行

Javascript JS:将条目与捕获组进行匹配,以计算新行,javascript,regex,Javascript,Regex,鉴于这一案文: 1/12/2011 I did something. 10/5/2013 I did something else. Here is another line. And another. 5/17/2014 Lalala. More text on another line. 我想使用正则表达式(或者其他方法?)来获得: ["1/12/2011", "I did something.", "10/5/2013", "I did something else.\n\nHe

鉴于这一案文:

1/12/2011
I did something.

10/5/2013
I did something else.

Here is another line.

And another.

5/17/2014
Lalala.
More text on another line.
我想使用正则表达式(或者其他方法?)来获得:

["1/12/2011", "I did something.", "10/5/2013", "I did something else.\n\nHere is another line.\n\nAnd another.", "5/17/2014", "Lalala.\nMore text on another line."]
日期部分内容部分都是单独的条目,交替使用

我尝试使用[^]而不是点,因为JS的。*不匹配新行(如前所述),但是匹配是贪婪的,占用了太多的空间,因此生成的数组只有一个条目:

var split_pattern = /\b(\d\d?\/\d\d?\/\d\d\d\d)\n([^]+)/gm;
var array_of_mems = contents.match(split_pattern);

// => ["1/12/2011↵I did something else..."]
如果我添加一个问号来获取[^]+?,根据这个问号匹配非贪婪,那么我只获取内容部分的第一个字符

最好的方法是什么?提前谢谢

(\d{1,2}\/\d{1,2}\/\d{4})\n|((?:(?!\n*\d{1,2}\/\d{1,2}\/\d{4})[\s\S])+)
您可以试试这个。抓取捕获。请参阅演示

您可以在循环中使用
exec()
方法来获得所需的结果

var re  = /^([\d/]+)\s*((?:(?!\s*^[\d/]+)[\S\s])+)/gm, 
matches = [];

while (m = re.exec(str)) {
  matches.push(m[1]);
  matches.push(m[2]);
}
输出

[ '1/12/2011',
  'I did something.',
  '10/5/2013',
  'I did something else.\n\nHere is another line.\n\nAnd another.',
  '5/17/2014',
  'Lalala.\nMore text on another line.' ]

我可以得到一些关于正则表达式的解释吗?[\d/]+是如何工作的?似乎一个关键的想法是使用[\S\S]。。。这到底是什么?或者只是关于正则表达式的一般要点,因为我想理解它,而不是简单地复制它。我会调查的?:还有?!-我认为,不捕获Groop和消极前瞻。。。这些是我在尝试编写自己的正则表达式时没有考虑的关键思想。谢谢谢谢你的回答!“:”是否仅适用于“(?!\n*\d{1,2}\/\d{1,2}\/\d{4})”,还是适用于“(?!\n*\d{1,2}\/\d{1,2}\/\d{4})[\s\s])+”?语法告诉我是后者,但我不明白“我做了什么”这样的内容是如何匹配的,因为“?:”表示不捕获匹配。
[ '1/12/2011',
  'I did something.',
  '10/5/2013',
  'I did something else.\n\nHere is another line.\n\nAnd another.',
  '5/17/2014',
  'Lalala.\nMore text on another line.' ]