Expression régulière (javascript)

Résolu/Fermé
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 - 16 nov. 2008 à 00:29
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 - 16 nov. 2008 à 14:56
Bonjour,

J'ai du mal avec les expressions régulières et je n'arrive pas à trouver celle qu'il me faut.
Ma chaîne de caractère à analyser n'est rien d'autre qu'un innerHTML d'une div dont je cherche un élément bien particulier.

Ma div (et donc la chaîne de caractère) contient une succession de balises li chacune ayant un id avec son indice :
<div id="content">
   <li id="lit1">
      mimi <a href ...> ... </a>
   </li>
   <li id="lit2">
      blablabla <a href ...> ... </a>
   </li>
   <li id="lit3">
      ton tonton tond ton tonton <a href ...> ... </a>
   </li>
   <li id="lit4">
      toto <a href ...> ... </a>
   </li>
</div>


Je ne comprends pas pourquoi mon expression régulière (fausse) ci-dessous ne fonctionne pas (elle ne trouve pas le motif) pour récupérer tout le contenu (balises incluses) du li
<li id="lit2">(^(</li>))+

En fait c'est pour trouver la fin de la balise qui me pose problème car la première partie de ma regexp fonctionne bien.
Je pense que l'utilisation du complémentaire doit se faire sur un seul caractère non ? Mais je ne sais pas comment m'en sortir alors parce que la balise li peut contenir d'autres balises (donc un simple complémentaire sur le < ne suffit pas).
Est-ce que quelqu'un saurait me dire comment faire ? Ou alors me la corriger gentillement :)

Merci d'avance
A voir également:

1 réponse

Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
16 nov. 2008 à 13:18
Salut Bizu53,
Essaie avec cette regExp là :
var reg = new RegExp('<li id="lit2">[\\w\\W]*?</li>', 'i');

En principe ça devrait être bon (par contre je récupère la balise </li> à la fin). Ca marche bien sur Firefox (par contre il ne faut pas que tu imbriques plusieurs blocs <li> sinon la regExp ne fonctionnera pas).

Par contre sur ie, le innerHTML est modifié notamment :
- <li id="lit1"> devient <LI id=lit1>
- les balises </li> sont supprimées

En conclusion, c'est assez dur de faire quelque chose de portable vu que chaque navigateur écrit son DOM comme il le veut. Ou alors il faut détecter le navigateur et créer ta regExp en fonction de celui-ci.

Cordialement,
1
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 859
16 nov. 2008 à 14:01
Merci pour ta réponse, je viens de la tester, elle ne me renvoi pas false mais je ne comprends pas exactement ce qu'elle trouve, ce n'est pas exact (toujours le problème de trouver la fermeture du li).

En me réveillant j'ai eu l'idée de pêcher le innerHTML du li id="lit2", chaîne de caractère à laquelle je concatène la balise d'ouverture et la balise de fermeture, et ensuite je fais rechercher ça dans le innerHTML de la div :). Je n'ai pas encore testé mais je ne vois pas pourquoi ça ne fonctionnerait pas (car c'est de la simple recherche de sous chaîne dans une chaîne).

Pour les problèmes de portabilité ça ne me dérange pas car la page que je fais est pour moi (en local sur mon pc) et je n'utilise que Mozilla Firefox :) mais merci du renseignement quand même au cas où j'en aurais besoin car je ne savais pas ça, ça pourra toujours m'être utile de le savoir pour autre chose peut-être.
0
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 859 > bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015
16 nov. 2008 à 14:56
C'est bon (évidemment) avec la recherche du innerHTML du li dans le innerHTML de la div :) il faut juste penser à escape() les deux chaînes si ya des parenthèses ou des trucs comme ça qui traînent.
0