web-dev-qa-db-fra.com

Convertir du HTML en texte brut dans JS sans environnement de navigateur

J'ai une fonction de carte de vue CouchDB qui génère un résumé d'un document HTML stocké (premiers x caractères du texte). Malheureusement, je n'ai pas d'environnement de navigateur pour convertir le HTML en texte brut.

Actuellement, j'utilise cette expression rationnelle en plusieurs étapes

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

même si c'est un très bon filtre, ce n'est évidemment pas parfait et certains restes se glissent parfois. Existe-t-il un meilleur moyen de convertir en texte brut sans environnement de navigateur?

18
Erik Aigner

Convertisseur HTML en texte brut comme 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, '');

Si vous pouvez utiliser jQuery:

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

Cette expression régulière fonctionne:

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

Avec TextVersionJS ( http://textversionjs.com ), vous pouvez convertir votre HTML en texte brut. C'est du javascript pur (avec des tonnes de RegExps), vous pouvez donc également l'utiliser dans le navigateur et dans node.js.

Dans node.js, cela ressemble à:

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

var textVersion = createTextVersion(yourHtml);

(J'ai copié l'exemple de la page, vous devrez d'abord installer npm le module.)

6
gyula.nemeth

Vous pouvez essayer de cette façon. textContent avec innerText aucun des deux n'est compatible avec tous les navigateurs:

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