2

javascriptを使用してtext/html、電子メールメッセージのContent-Type部分を解析し、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。どうすればよいですか?

注:ハッキーな正規表現で大丈夫です。これが防弾になるとは思わない。

4

3 に答える 3

5

RFC/MIME ドキュメントに基づいて、カプセル化の境界は、完全に 2 つのハイフン文字 (「-」、10 進コード 45) と、その後に続く Content-Type ヘッダー フィールドの境界パラメーター値で構成される行として定義されます

注: 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);
于 2012-07-03T21:43:47.720 に答える
3

Ωmega による答えは近いですが、境界に-文字が含まれているかどうかはわかりません。

最初にヘッダー内を調べる必要があります。実際のメール コンテンツのヘッダーと本文は で区切られ\r\n\r\nます。次のようなヘッダーが表示されます。

Content-Type: multipart/alternative;
    boundary="------=_Part_1504541_510475628.1327512846983"

この境界は、実際の仕切りを見つけるために使用できるものです。次に、Ωmega と同じように正規表現を作成できますが、この除算器を代用できます。

注意すべき唯一のことは--、通常の境界コンテンツに加えて、最後の境界が最後にあるということです。

于 2012-07-04T15:11:44.957 に答える
2
var html = source.toString().substr(source.toString().indexOf("\n\n")).trim();
于 2012-07-03T21:12:31.717 に答える