使用javascript,我需要解析电子邮件的Content-Type text/html
部分并仅提取HTML部分。以下是相关邮件来源部分的示例:
------=_Part_1504541_510475628.1327512846983
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 7bit
<html ... a bunch of html ...
/html>
我希望在<html>
之后提取{和{包括} text/html
代码之间的所有内容。我该怎么做?
注意:我可以使用hacky正则表达式。我不认为这是防弹的。
答案 0 :(得分:3)
基于RFC / MIME文档,封装边界被定义为一个完全由两个连字符(“ - ”,十进制代码45)组成的行,后跟Content-Type头字段中的边界参数值< / em>的
注意:在JavaScript中,确实没有/s
修饰符可使点.
与所有字符匹配,包括换行符。要绝对匹配任何字符,您可以使用包含速记类及其否定版本的字符类,例如[\s\S]
。
的正则表达式:强> 的
\n--[^\n\r]*\r?\nContent-Type: text\/html[\s\S]*?\r?\n\r?\n([\s\S]*?)\n\r?\n--
的 JavaScript的:强> 的
matches = /\n--[^\n\r]*\r?\nContent-Type: text\/html[\s\S]*?\r?\n\r?\n([\s\S]*?)\n\r?\n--/gim.exec(mail);
答案 1 :(得分:3)
Ωmega的答案很接近,但你无法确定边界是否包含-
字符。
首先需要查看标题内容。实际电子邮件内容的标题和正文将以\r\n\r\n
分隔。您应该看到类似
Content-Type: multipart/alternative;
boundary="------=_Part_1504541_510475628.1327512846983"
然后您可以使用此边界来查找实际的分隔符。然后,您可以像Ωmega一样构造一个正则表达式,但在此分隔符中替换。
唯一需要注意的是,除了正常的边界内容之外,最后一个边界最后会有--
。
答案 2 :(得分:2)
var html = source.toString().substr(source.toString().indexOf("\n\n")).trim();