Node.js:用于获取电子邮件标题和正文的正则表达式

时间:2011-04-12 14:00:04

标签: javascript regex node.js

我对正则表达式知之甚少,而且我无法通过电子邮件获取所需信息,所以我希望您的帮助可以阅读以下字段:“status”,“to”,“from”,“主题“和”身体“。

The e-mail has failed, details:

Action: failed
Status: 5.0.0 (permanent failure)

---------- Forwarded message ----------
From: exp@gmail.com
To: regular_exp@gmail.com
Date: Tue, 12 Apr 2011 13:55:23 +0000
Subject: test
hellloooooo

使用JavaScript执行此操作的最佳方式是什么?

由于

2 个答案:

答案 0 :(得分:2)

正则表达式可能不是这项工作的最佳工具。你真正想要的是a library that properly parses RFC 2822 email messages,特别是因为你想要提取正文 - 如果你看the spec,你会发现解析电子邮件涉及很多复杂性(文本编码,MIME等等。)

使用mailparser:

var mailparser = require("./mailparser"),
    fs = require("fs"),
    sys = require("sys");

fs.readFile('mail.txt', function (err, data) {
    if (err) throw err;

    var mp = new mailparser.MailParser();

    // callback for the headers object
    mp.on("headers", function(headers){
        console.log("HEADERS");
        console.log(sys.inspect(headers, false, 5));
    });

    // callback for the body object
    mp.on("body", function(body){
        console.log("BODY");
        console.log(sys.inspect(body, false, 7));
    });

    mp.feed(data.toString("ascii"));
    mp.end();
});

答案 1 :(得分:0)

假设这些字段与

一样简单且一致

[\n] From: [...][\n]

然后是一个像

这样的表达式

/[\n]( From: ).+[\n]/

适合你。将(From :)替换为(Date :)等等。

并使用string.match(regExp)

<强>更新

var bodyRegex = /[\n] Subject: (.+)[\n](.+)/
var string = ...;
var result = string.match(bodyRegex);
result[1]; // Subject
result[2]; // Body