我需要在结尾处将大文本拆分为单独的对话。所有对话都以日期和时间开始。如何使用正则表达式按日期+时间拆分,但仍将日期和时间保留在文本中,而不是实际将其与文本的其余部分拆分?
详情:
// Sample text:
22/06/2019, 21:54 - Name 1, (N: Si mute ? sa nu mai ma vibreze
22/06/2019, 21:55 - Name 2: Comunicat de interes public.
"Pentru o viata sănătoasă sunt recomandate aceste setari."
22/06/2019, 21:55 - Name 3: ???????
24/06/2019, 18:14 - Name 2: Sa va explic, eu pana acum nu m-am jucat cu WhatsApp îndeajuns dar am cautat prin el acum si am descoperit ca are muulte semne mai mult sau mai putin utile printre care si asta ?. acum intrebarea e daca semnu asta face referire la propozitia de mai sus sau e ce ne gandim cu totii? ?
25/06/2019, 10:11 - Name 1: ?psd? ?
我尝试使用像下面这样的简单 '\n',但它失败了,因为某些对话包含换行符:
$arrRows=stringData.split(/\n/);
// this does not work for the item below, as it will split it into 2 conversations and I need to keep it as 1
'22/06/2019, 21:55 - Name 2: Comunicat de interes public.
"Pentru o viata sănătoasă sunt recomandate aceste setari."'
所以我没有考虑使用正则表达式并在每一行的开头按日期/时间拆分,所以我使用了这个:
const regexRow=/(?<date>\d{2}\/\d{2}\/\d{4}), (?<time>\d{2}:\d{2})/;
$arrRows=stringData.split(regexRow);
,这没问题,但我需要保留文本中的日期和时间以在稍后阶段对其进行解析,对每一行使用以下代码:
const regexi = /(?<date>\d{2}\/\d{2}\/\d{4}), (?<time>\d{2}:\d{2}) - (?<person>.*): (?<link>https?[^ ]*)?(?<rest>.*)/;
答案 0 :(得分:3)
要保留结果中的日期/时间,您可以在换行符上拆分,并在下一行的开头对日期/时间进行前瞻:
const stringData = `22/06/2019, 21:54 - Name 1, (N: Si mute ? sa nu mai ma vibreze
22/06/2019, 21:55 - Name 2: Comunicat de interes public.
"Pentru o viata sănătoasă sunt recomandate aceste setari."
22/06/2019, 21:55 - Name 3: ???????
24/06/2019, 18:14 - Name 2: Sa va explic, eu pana acum nu m-am jucat cu WhatsApp îndeajuns dar am cautat prin el acum si am descoperit ca are muulte semne mai mult sau mai putin utile printre care si asta ?. acum intrebarea e daca semnu asta face referire la propozitia de mai sus sau e ce ne gandim cu totii? ?
25/06/2019, 10:11 - Name 1: ?psd? ?`;
const lines = stringData.split(/\n(?=\d{2}\/\d{2}\/\d{4}, \d{2}:\d{2})/)
console.log(lines)