Node.js:正则expression式获取“From:”和“To:”

鉴于这个文本文件:

Received: from unknown (HELO aws-bacon-delivery-svc-iad-1007.vdc.g.com) ([10.146.157.151]) by na-mm-outgoing-6102-bacon.iad6.g.com with ESMTP; 12 Apr 2011 14:30:47 +0000 Return-Path: 0000012f4a2a0037-528dbafb-e773-44be-bef5-07d8f63e6aee-000000@email-bounces.g.com Date: Tue, 12 Apr 2011 14:42:37 +0000 From: xxx@xxx.example.com To: yyy@yyy.example.com Message-ID: <0000012f4a2a0037-528dbafb-e773-44be-bef5-07d8f63e6aee-000000@email.g.com> Subject: test Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-AWS-Outgoing: 199.255.192.79 testing123 

我想获得每个领域(返回path,date,从,到等)以及正文(“testing123”)。

我试过匹配使用:

  var bodyRegex = /[\n]Subject: (.+)[\n](.+)/ 

但我得到空值。

尝试这个:

码:

 //var rePattern = new RegExp(/^Received:(.*)$/); var rePattern = new RegExp(/^Subject:(.*)$/); var arrMatches = strText.match(rePattern); 

结果:

 arrMatches[0] -> Subject: test arrMatches[1] -> test 

这个问题刚刚向我build议(尽pipe它已经很老了?),我认为接受的答案并不完全按照要求(得到每一个领域+身体),所以我想我会分享这个…

为了得到每个头和它的值,有一个相当简单的正则expression式( http://regexr.com/3e60k )有两个捕获组,这也允许在一个值内换行(如果是缩进):

 var pattern = /(.+):\s(.+(?:\n +)?.+)?/g; 

对可以像检索一样

 var match; while (match = pattern.exec(string)) { console.log(match[1] + ": " match[2]); } 

获得body( http://regexr.com/3e60h )更简单,因为它必须用两个换行符分开:

 var body = string.match(/\n\n([\s\S]+)/)[1]; 

这符合两个\n (空格和非空格)之后的任何内容。

看这个小提琴一个完整的例子: http : //es6fiddle.net/issocwc9/