PlayerMania
Messages postés95Date d'inscriptionjeudi 22 avril 2004StatutMembreDernière intervention28 avril 2009
-
24 sept. 2008 à 11:55
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
28 avril 2009 à 09:53
Bonjour,
J'ai un souci avec une regexp.
Je souhaite modifier des liens html si ceux-ci ne contiennent pas la class css aX :
Un lien sans class="aX" doit etre supprimer pour obtenir seulement "txt"
Il se peut que class="aX" ne soit pas tjrs à la meme place, d'autres attributs seront aussi des fois présent dans le lien.
J'ai d'ailleur réussi à faire marcher une regexp si la class était en 1er position (juste derriere ]*>(.*?)<\/a>/gi,"$2")
Je pensais que celle ci fonctionnerai :
replace(/]*(?!(class=aX|class="aX"))[^>]*>(.*?)<\/a>/gi,"$2")
et non...
Bref, j'aimerais bien comprendre comment dire en plein milieu de ma regexp qu'il ne faut pas trouver qqch !?
PlayerMania
Messages postés95Date d'inscriptionjeudi 22 avril 2004StatutMembreDernière intervention28 avril 2009 28 avril 2009 à 09:23
Le ? sert à dire que ce qui le précède doit se trouver zero ou une seule fois.
Donc quand il y a .*?, on veux qu'il y est rien (si rien),
OU juste un seul gros morceau, qui va couvrir toutes les correspondance qui aurai pu etre possible jusqu'a la derniere.
AU final, ce petit .*? est fort magique et t'aideras bcp dans des balises html, ou il faut prendre assurement l'intégrité de la balise sans se gourrer.
Le .+ veux au moins un caractere hors certain endroit du lien seront des fois vide.
Et .+ commencera, s'arretera des qu'il rencontrera la balise ouvrante/fermente qu il y a dans la regex dans le texte. (exemple: [lien_aX lien_ok]'+CRLF
+'[no fulltext]testtxtB'+CRLF;
regex1 = HTML.replace(/()|(?:(.+)<\/a>)/gi,'$1$2');
regex2 = HTML.replace(/()|(?:(.*)<\/a>)/gi, '$1$2');
regex3 = HTML.replace(/(.*?<\/a>)|(?:(.*?)<\/a>)/gi, '$1$2');
regex3 = regex3.replace(/(.*?<\/a>)|(?:(.*?)<\/a>)/gi, '$1$2'); // test a faire pour voir si il reste des liens sans class=ax
alert(regex1);
alert(regex2);
alert(regex3);
</script>
(moi aussi j'ai une interrogation, assez bizzarement, si des sauts de lignes ne sont pas fait apres chaque lien, le résultat est différent et faussé, sauf pour la regex3, le saut de ligne a l'air de bien séparé les traitement pour les autres.)
Un autre exemple plus simmple est ['"]? avec ? qui correspond donc à zero ou une fois ce qui le précede, donc une apostrophe ou une guillemet ou "rien".
Avec ['"]+, tu va rechercher au moins une apostrophe (voir plus) ou au moins une guillemet (voir plus), voir des apostrophes et guillemets, mais pas la possibilité "rien".