Posez votre question Signaler

Expression régulière (javascript) [Résolu]

bizu53 1178Messages postés 30 août 2008Date d'inscription 11 février 2012Dernière intervention - Dernière réponse le 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
Lire la suite 

Expression régulière (javascript) »

3 réponses
Réponse
+1
moins plus
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,
bizu53 - 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.
bizu53 - 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.
Ajouter un commentaire
Ce document intitulé « Expression régulière (javascript) » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
5 extensions si vous voulez revenir à l'ancien Facebook