web-dev-qa-db-ja.com

ブラウザ環境なしでJSでHTMLをプレーンテキストに変換する

保存されたHTMLドキュメントの抽象(テキストの最初のx文字)を生成するCouchDBビューマップ関数があります。残念ながら、HTMLをプレーンテキストに変換するブラウザ環境はありません。

現在、私はこの多段階正規表現を使用しています

html.replace(/<style([\s\S]*?)<\/style>/gi, ' ')
    .replace(/<script([\s\S]*?)<\/script>/gi, ' ')
    .replace(/(<(?:.|\n)*?>)/gm, ' ')
    .replace(/\s+/gm, ' ');

それは非常に良いフィルターですが、それは明らかに完璧なものではなく、いくつかの残り物は時々すり抜けます。ブラウザ環境なしでプレーンテキストに変換するより良い方法はありますか?

18
Erik Aigner

HTMLをGmailのようなプレーンテキストに変換します。

html = html.replace(/<style([\s\S]*?)<\/style>/gi, '');
html = html.replace(/<script([\s\S]*?)<\/script>/gi, '');
html = html.replace(/<\/div>/ig, '\n');
html = html.replace(/<\/li>/ig, '\n');
html = html.replace(/<li>/ig, '  *  ');
html = html.replace(/<\/ul>/ig, '\n');
html = html.replace(/<\/p>/ig, '\n');
html = html.replace(/<br\s*[\/]?>/gi, "\n");
html = html.replace(/<[^>]+>/ig, '');

jQueryを使用できる場合:

var html = jQuery('<div>').html(html).text();
5
EpokK

この正規表現は機能します:

text.replace(/<[^>]*>/g, '');
9
Gael

TextVersionJS( http://textversionjs.com )を使用すると、HTMLをプレーンテキストに変換できます。これは純粋なjavascript(大量のRegExpsを含む)なので、ブラウザーやnode.jsでも使用できます。

Node.jsでは次のようになります。

var createTextVersion = require("textversionjs");
var yourHtml = "<h1>Your HTML</h1><ul><li>goes</li><li>here.</li></ul>";

var textVersion = createTextVersion(yourHtml);

(ページから例をコピーしました。最初にモジュールをnpmインストールする必要があります。)

6
gyula.nemeth

この方法を試すことができます。 textContent with innerTextどちらもすべてのブラウザと互換性がありません:

var temp = document.createElement("div");
temp.innerHTML = html;
return temp.textContent || temp.innerText || "";
1