Comment utiliser split mais ignorer html / javascript / php et les autres balises internes?

Mon code insère un contenu HTML après le nombre X de mots d’un article de blog. Le code fonctionne, mais il y a un problème: il supprime tout ce qu’il trouve sur le chemin, même javascript, html, peu importe.

Le if (index == 2) compte les deux premiers mots du code, puis insère le code HTML (dans ce cas une image) après ces mots, mais ne fait aucune distinction entre le texte HTML et le texte pur. J’ai trouvé un sujet ici disant que je devrais utiliser quelque chose comme ceci:

 result = subject.match(/<\s*(\w+\b)(?:(?!<\s*\/\s*\1\b)[\s\S])*|\S+/g); 

Mais je ne sais pas comment le mettre en œuvre.

Fondamentalement, j’ai besoin que le code compte chaque mot, mais ignore toutes les balises telles que

Si vous utilisez .text () au lieu de .html (), aucune des balises ne s’affichera. Par exemple:

  
this is a test

puis

 var mytext = $("#test").text(); 

mytext serait égal à “ceci est un test”;

 word = word.replace(/<\/?[\w#"'-=:; {},.\r\n]+\/?>/g, '\n'); word = word.replace(/ /gi, ''); 

vous n’avez probablement besoin que de la première ligne. ajoutez ceci après le $ chacun. line et avant newHtml + = line.

—————– modifier

J’ai probablement mal compris la première fois. Essayez de supprimer les tags avant de scinder ()

 jQuery(function($) { //var wordList = $(".newsitem_text").html().split(' '); var wordList = $(".newsitem_text").html(); wordList = wordList.replace(/<\/?[\w#"'-=:; {},.\r\n]+\/?>/g, '\n'); wordList = wordList.split(' ') var newHtml = ' '; $.each(wordList, function(index, word){ newHtml += ' ' + word; if (index == 2) { newHtml += '' } }) ; $(".newsitem_text").html(newHtml); });