想要一个reqular表达式来解析带有↵字符

时间:2016-01-10 14:32:31

标签: javascript regex node.js

想要解析以下电子邮件主题中的最新回复。即你好Nikhil Bopora,↵↵只是简单介绍一下,我正在建设一个 备用电子借贷平台。

我编写的一般正则表达式涵盖了各种用例/[\s]*([\s\S]*.)[\s]*\n\n[\s]*On [\s\S]*.<[\s\S]*.> wrote/ 是不是在↵角色上工作。

有人可以帮我在javascript中编写一个好的正则表达式来解析它。

  

你好Nikhil,↵↵只是简单介绍一下,我正在建设一个   备用电子贷款平台。2016年1月10日星期日下午1:16,   Deepak Modak撰写:↵↵&gt; Deepak Modak有   发送消息↵&gt;↵&gt;我正在努力建立一个金融产品,需要   您的反馈和insights.↵&GT;↵&GT;请求的时间段:↵&gt;   --------------------------↵&GT; 2016年1月11日星期一,晚上10:00 ↵&gt;↵&gt;↵&gt;

2 个答案:

答案 0 :(得分:1)

试图给出一个简短的答案,这里它是一个单一的正则表达式,应该适合你,没有任何替代品。 \ u21b5代表“↵”并使其成为可能。如果你想稍后摆脱箭头,只需用/ \ u21b5 / pattern进行单独搜索,然后用空格替换,就像我在之前的回答中所做的那样。

/((.|\u21b5)+?)(?:On\s+[A-Z]{3},\s+[A-Z]{3}\s+\d{1,2},\s+\d{4}\s+at\s+\d|$)/i

添加信息:

我会尝试在最后一次编辑后单独留下这个,但下面是我认为是对最后一个模式的重大改进。以下模式也可以独立存在(不需要替换),但改进(我相信)是没有捕获组。返回的匹配应该准确显示正在寻找的内容;需要拉出子匹配,如上例所示。这是通过使用积极的前瞻来完成的。如果有更好的方式让我传达此信息(例如在评论中),请告诉我。

/(?:(?:.|\u21b5)+?)(?=(?:On\s+[A-Z]{3},\s+[A-Z]{3}\s+\d{1,2},\s+\d{4}\s+at\s+\d|$))/i

答案 1 :(得分:0)

没有一个干净的RegEx,但我能够让它工作。我分两步完成了这个步骤,首先删除了Unicode字符(我猜你不想在结果中看到那些箭头)。也许只有RegEx就是你想要的,但我提供了所有的代码,希望能更清楚地说明我做了什么。我注意到的一件事是,上面的字符串中的第一个日期在字符串中的第二个日期没有的日期中有逗号。我认为这正是电子邮件将继续进入的方式,但如果没有,您可以相应地调整RegEx。我希望这会有所帮助。

   <script>
       "use strict";
         var patt = /()/;
         var myString = "";
         var match=[];

            myString = "Hello Nikhil,↵↵Just to give a brief, I am in process of building an alternate e-lending↵platform.↵↵↵On Sun, Jan 10, 2016 at 1:16 PM, Deepak Modak ↵wrote:↵↵> Deepak Modak has sent a message↵>↵> I am trying to build a financial product, need your feedback & insights.↵>↵> Requested TimeSlots:↵> --------------------------↵> Mon Jan 11 2016, 10:00 PM↵>↵>↵>";

         //for the replace regex, using the required 4 hexadecimal digits "21b5" that represent the unicode character "downwards arrow with corner leftwards"
            patt = /\u21b5/g;
         //replacing arrow with empty space
            myString = myString.replace(patt," ");

         //resetting the pattern. I added a pipe (or) to account for the possibility that the email is not a reply. Looking for "On Sun, Jan 10, 2016 at 1" or similar pattern to represent start of end of captured group of interest.

            patt = /(.+?)(?:On\s+[A-Z]{3},\s+[A-Z]{3}\s+\d{1,2},\s+\d{4}\s+at\s+\d|$)/i;

            match = patt.exec(myString);

            console.log("The submatch: " + match[1]);

    </script>