Expression régulière (javascript)
Résolu
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 -
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 -
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 :
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
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:
- Expression régulière (javascript)
- Expression écrite cm1 cm2 télécharger gratuit - Télécharger - Éducatifs
- Telecharger javascript - Télécharger - Langages
- Microsoft expression encoder - Télécharger - Divers Utilitaires
- Javascript arrondi ✓ - Forum Javascript
- Javascript void 0 c'est quoi ✓ - Forum Réseaux sociaux
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
329
16 nov. 2008 à 13:18
16 nov. 2008 à 13:18
Salut Bizu53,
Essaie avec cette regExp là :
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,
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,
16 nov. 2008 à 14:01
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.
16 nov. 2008 à 14:56