Rechercher : dans
Par :

Expression régulière (javascript)

Dernière réponse le 16 nov 2008 à 14:56:01 bizu53, le 16 nov 2008 à 00:29:34 
 Signaler ce message aux modérateurs

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
Configuration: Windows XP
Firefox 3.1

Meilleures réponses pour « Expression régulière (javascript) » dans :
[RegExp] Récupérer une adresse IP VoirFinalité Mise en œuvre Explications Interprétation du motif Récupérer une adresse IP Finalité Pour récupérer une IP dans un fichier texte, fichiers journaux, pages web, etc. Mise en œuvre L'expression régulière suivante combinée à la...
Sed - Trucs et astuces VoirSubstitution Affichage Suppression Espace et tabulation Ligne vide Intervalle régulier Divers Joindre des lignes Affichage insensible à la casse Substitution Substituer "foo" par "bar" à chaque ligne Seulement la 1ère...
Télécharger Renamer4Mac VoirRenamer4Mac permet de renommer facilement un grand nombre de fichiers. Par un simple glisser/déposer des fichiers sur son icône ou dans sa fenêtre, on peut agir de différentes manières. par Rechercher/Remplacer (expression régulière et...
PHP - Expressions régulières VoirQu'est-ce qu'une expression régulière? Les expressions régulières sont des modèles créés à l'aide de caractères ASCII permettant de manipuler des chaînes de caractères, c'est-à-dire permettant de trouver les portions de la chaîne correspondant au...
Javascript - L'objet RegExp VoirLes particularités de l'objet RegExp L'objet RegExp est un objet permettant de manipuler des expressions régulières, c'est-à-dire des modèles créés à l'aide de caractères ASCII permettant de manipuler des chaînes de caractères, afin de trouver des...

1

Marco la baraque, le 16 nov 2008 à 13:18:19
  • +1

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, rtfm and jfgi

Répondre à Marco la baraque

2

bizu53, le 16 nov 2008 à 14:01:07
  • +1

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.

Répondre à bizu53

3

 bizu53, le 16 nov 2008 à 14:56:01
  • +1

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.

Répondre à bizu53