Aller au contenu

Sujets conseillés

Posté

Bonjour bonjour,

Aujourd'hui je cherche à faire quelque chose que même en chipotant pendant des heures je me sais incapable de faire. Voici l'affaire : je dois parser un texte contenant des balises, sauf que je dois uniquement garder certaines balises, et pas d'autres, et que tout le texte doit fiche le camp.

Donc dans cette phrase : "Bonjour, <a>je suis</a> une belle <d>chaîne</d> pleine de <c>balises</c>. Comment vas-tu t'y <b>prendre</b> ?"

J'ai bien fait exprès de mettre les balises <c> avant les <b> pour montrer que chaque balise peut être rencontrée n'importe où.

On va dire que je ne veut obtenir que les <a> et ce qu'il y a entre, et que les <c>. Le résultat dans ce cas serais donc "<a>je suis</a><c>balises</c>".

Des idées là-dessus (je crois que ça va être compliqué :P) ? Merci d'avance !

Posté

ça peut te donner une idée, mais il y a surement mieux à faire, pas très inspiré en ce début d'année ;)


var str = "Bonjour, <a>je suis</a> une belle <d>chaîne</d> pleine de <c>balises</c>. Comment vas-tu t'y <b>prendre</b> ?"
var oreg = /<[a|c]{1}[^>]*>[^<]*?<\/[a|c]{1}[^>]*>/gi;
var arr = str.split(oreg);
for(var a in arr)
str = str.replace(arr[a],'');
alert(str);

Posté

Ah oui pas mal, j'ai moi-même essayé mais avec exec() :


var str = "c'est <a>parce</a> que je <b>cherche</b> à ne <c>garder</c> que <d>certaines</d> balises",
balisesAGarder = ['a','d'],
reg = new RegExp('[\\s\\S]*?(<('+balisesAGarder.join('|')+')>[\\s\\S]*?<\\/\\2>)[\\s\\S]*?','g'),
res = null,
newStr = "";
while(res = reg.exec(str)) {
newStr += res[1];
}

alert(newStr); // <a>parce</a><d>certaines</d>

C'est un peu lourd à cause du while (vaut mieux éviter de l'employer en continu et ne l'enclencher que via un événement).

Merci Steph, a+ :D

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...