Jump to content

Emploi subtil des regex


MrPierre

Recommended Posts

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 !

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...