Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript WhatsApp聊天日志的正则表达式_Javascript_Regex - Fatal编程技术网

Javascript WhatsApp聊天日志的正则表达式

Javascript WhatsApp聊天日志的正则表达式,javascript,regex,Javascript,Regex,我想以数组的形式返回WhatsApp对话。 为了做到这一点,我正在使用正则表达式,但是我无法让它工作 这是通过WhatsApp导出的聊天示例(已编辑): 6/13/18,凌晨3:40-发送到此组的邮件现在通过端到端加密进行保护。点击查看更多信息。 2018年6月13日凌晨3:40-您创建了“测试组” 2018年6月13日,凌晨3:42——扎克加上了艾玛 2018年6月13日凌晨4:06-扎克添加了Json 2018年6月13日,下午2:35-扎克:我们明天见。 2018年6月15日,下午5:34

我想以数组的形式返回WhatsApp对话。 为了做到这一点,我正在使用正则表达式,但是我无法让它工作

这是通过WhatsApp导出的聊天示例(已编辑):

6/13/18,凌晨3:40-发送到此组的邮件现在通过端到端加密进行保护。点击查看更多信息。
2018年6月13日凌晨3:40-您创建了“测试组”
2018年6月13日,凌晨3:42——扎克加上了艾玛
2018年6月13日凌晨4:06-扎克添加了Json
2018年6月13日,下午2:35-扎克:我们明天见。
2018年6月15日,下午5:34-艾玛:我将在今晚之前创建Discord服务器。
我们将研究如何制作解析器。
2018年7月15日,下午12:05-扎克:太好了,我会把它加入我们的日程。
2018年7月15日,下午12:05-Json:关于我们的团队日历-TCal?
2018年7月15日下午12:05-扎克:是的,于2018年7月15日下午12:05添加。
2018年7月15日,下午12:05-艾玛:我们要继续吗?
2018年7月15日,下午12:05-Json:当然可以。
2018年7月15日12:05-扎克:JS是爱,JS是生命。
2018年7月15日下午1:46-艾玛:哈哈。
2018年7月15日下午4:53-Json:您可以在正向前瞻中使用您的(稍微缩短的)模式:

const regexParser = /^(?:\u200E|\u200F)*\[?(\d{1,4}[-/.] ?\d{1,4}[-/.] ?\d{1,4})[,.]? \D*?(\d{1,2}[.:]\d{1,2}(?:[.:]\d{1,2})?)(?: ([ap]\.? ?m\.?))?\]?(?: -|:)? (.+?): ([^]*)/i;

这里,模式将匹配紧跟着
\d{1,2}\/\d{1,2}\/\d{2}、\s\d{1,2}:\d{2}\s[AP]M
模式的每一行起始位置

JS演示:


var s=“6/13/18,3:40 AM-发送到此组的邮件现在已通过端到端加密进行保护。点击以获取详细信息。\r\n6/13/18,3:40 AM-您创建了组\“测试组”\“\r\n6/13/18,凌晨3:42-扎克添加了Emma\r\n6/13/18,凌晨4:06-扎克添加了Json\r\n6/13/18,下午2:35-扎克:我们明天见。\r\n6/15/18,下午5:34-艾玛:今晚我将创建Discord服务器。\r\n我们将研究如何制作解析器。\r\n7/15/18,下午12:05-扎克:太好了,我将把它添加到我们的日程安排中。\r\n7/15/18,12:05 PM-Json:在我们的团队calander-TCal上?\r\n7/15/18,12:05 PM-Zack:是的,在7/15/18,12:05 PM上添加。\r\n7/15/18,12:05 PM-Emma:我们正在进行JS吗?\r\n7/15/18,12:05 PM-Json:当然。\r\n7/15/18,12:05 PM:05-Zack:JS是爱,JS是生命。\r\n7/15/18,1:46 PM-Emma:哈哈。\r\n7/15/18,4:53 Json:很好用,我只是想告诉大家,导出格式在很大程度上取决于您的系统语言

例如,2012年12月2日11点(英语)与2012年12月2日23:00(德语)的对比,因此您当前的解决方案只能处理某些情况

此外,系统消息或附件稍后将为您创建问题

在构建一个分析WhatsApp聊天的工具时,我遇到了同样的问题,并使用了一个使用多个正则表达式的工具,该表达式几乎涵盖了所有的角落情况:

筛选常规:

const regexParserSystem = /^(?:\u200E|\u200F)*\[?(\d{1,4}[-/.] ?\d{1,4}[-/.] ?\d{1,4})[,.]? \D*?(\d{1,2}[.:]\d{1,2}(?:[.:]\d{1,2})?)(?: ([ap]\.? ?m\.?))?\]?(?: -|:)? ([^]+)/i;
筛选系统消息:

const regexSplitDate = /[-/.] ?/;
日期:

处理附件,即使导出聊天时没有附件,附件也会传入“<>”。(例如)

const regexAttachment=/`

非常感谢您。工作起来很有魅力。
const regexSplitDate = /[-/.] ?/;
const regexAttachment = /<.+:(.+)>/;`