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/