2011-04-15 23 views
9

bu metin dosyasını Verilen: venode.js: Düzenli "From:" Get İfade "Kime:"

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: [email protected]il-bounces.g.com 
Date: Tue, 12 Apr 2011 14:42:37 +0000 
From: [email protected] 
To: [email protected] 
Message-ID: <[email protected]il.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 

Her alanını almak istiyorum itibaren (Return-yolu, Tarih, için, vb ..) yanı sıra vücut ("testing123)

kullanıyorum eşleşen denedim:

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

ama boş değer elde

cevap

20

bu deneyin:.

Kodu:

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

var arrMatches = strText.match(rePattern); 

Sonuç:

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

Bu soru sadece (o !? oldukça eski olsa bile) bana önerildi ve kabul cevap kokan düşünüyorum t tam olarak ne için sordu (her alan + vücut olsun), bu yüzden ben bunu paylaşacağım düşündüm ...

Her hea almak için der ve (girintili varsa) aynı zamanda bir değer içinde satır sonları verir iki yakalama gruplarıyla oldukça basit regex (http://regexr.com/3e60k) vardır değeri: çiftleri

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

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

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

eşleşir: iki yeni hat karakterlerle başlıklarına ayrılmış gerektiğinden

vücudu (http://regexr.com/3e60h) almak için bile basittir iki \n (boşluk ve boşluk olmayan) sonra herhangi bir şey.

tam örneğin bu keman bakınız: http://es6fiddle.net/issocwc9/