Преобразование HTML в обычный текст в JS без среды браузера

У меня есть функция CouchDB view map, которая генерирует реферат сохраненного HTML-документа (первые x символы текста). К сожалению, у меня нет среды браузера для преобразования HTML в обычный текст.

В настоящее время я использую это многоступенчатое регулярное выражение

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

в то время как это очень хороший фильтр, он, очевидно, не идеальный, и некоторые остатки иногда проскальзывают. Есть ли лучший способ конвертировать в обычный текст без среды браузера?

Ответы

Ответ 1

Это регулярное выражение работает:

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

Ответ 2

С 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);

(Я скопировал пример со страницы, вам сначала нужно будет установить модуль.)

Ответ 3

Конвертировать 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();

Ответ 4

Это довольно просто, вы также можете реализовать прототип "toText":

String.prototype.toText = function(){
    return $(html).text();
};

//Let test it out!
var html = "<a href=\"http://www.google.com\">link</a>&nbsp;<br /><b>TEXT</b>";
var text = html.toText();
console.log("Text: " + text); //Result will be "link TEXT"