0

在收到的电子邮件中,第一行的格式为:

** 来自“Doug、Mon 和 Monta - 测试组”的新更新:在此行上方回复以发表评论 **

当有人回复时,在服务器端,我可以通过简单的indexOf()检查去掉那些传入的行。

问题是一些邮件客户端(比如我自己的 Apple Mail)在回复表单时在该行上方添加了额外的文本:

2012 年 12 月 28 日上午 10:19,“XYZ 社区 - Doug、Mon 和 Monta - 测试组”写道:

我尝试用这样的正则表达式来捕获它:

var rx1 = new RegExp('on.*wrote:', 'ig');

虽然这在大多数情况下都有效,但不幸的是,它也捕获了一个人可能会在早些时候回复包含“on”的文本的情况,例如:

在那个站点上,我认为我们感兴趣的是此页面上描述的 AgroTagger 服务,其中...

在某些情况下,会找到上述文本中的“on”,之后的所有内容都会被我的代码修剪。

我试图通过包含行首字符并添加多行修饰符来缩小正则表达式的范围,如下所示:

var rx1 = new RegExp('^on.*wrote:', 'igm');

但在这种情况下,根本找不到该行并包含在文本中。我猜一行开头的 ^ 元字符对于 JavaScript 字符串中间的一行实际上不起作用?

无论如何,任何建议将不胜感激。基本上,我使用indexOf(). 对于邮件客户端在该行上方添加更多不需要的文本的情况,我需要在此之后进行额外检查。

谢谢,

道格

ps 如果有人能告诉我如何在此处发布回复时收到电子邮件通知,我将非常感激。到目前为止,我没有尝试过任何工作。

4

1 回答 1

1

对于您描述的文字,这在我的测试中有效......

emailBody = emailBody.replace(new RegExp("^On .+ wrote:$[.\\r\\n]*", "im"), "");

...这非常像您的正则表达式 - 所以我不确定为什么您的完全不匹配。

我确实在收件箱中的一些电子邮件中注意到,行首有空格。也许这就是你遇到的问题?在这种情况下,这将解决它:

emailBody = emailBody.replace(new RegExp("^\\s*On .+ wrote:\\s*$[.\\r\\n]*", "im"), "");
于 2012-12-28T03:06:53.503 回答