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?
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();
Cette expression régulière fonctionne:
text.replace(/<[^>]*>/g, '');
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.)
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 || "";