IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Probleme expression réguliere


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 4
    Par défaut Probleme expression réguliere
    Bonjour j'ai un problème sur une expression régulière

    j'ai le texte suivant :

    test [G] mot1 [/G] ggg [G] mot2 [/G]

    le but est de récupérer les chaines composé de : [G] multiple caractères [/G]

    donc dans ce cas je voudrais récupérer [G] mot1 [/G] et [G] mot2 [/G]


    j'ai donc d'abord utilisé cette expression : \[G\].+\[/G\]

    Mais la problème ca me récupère la chaine : [G] mot1 [/G] ggg [G] mot2 [/G] (c'est tout a fait logique)

    j'ai donc essayé de mofidifier mon expression régulière mais le problème est toujours présent. Voici un exemple de mon expression modifié

    \[G\].+[^(\[/G\])].*[^(\[G\])].*\[/G\]
    et ca ca me retourne quand meme : [G] mot1 [/G] ggg [G] mot2 [/G].

    Quelqu'un a t'il une idée

    Merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 214
    Par défaut
    Par hasard, tu n'as pas besoin d'échapper aussi les / ?

    Moi j'ai essayé ça :

    (\[G\])[^\[/G\]]*\[/G\]

    Et ça tourne.
    Bien sûr, je n'ai pas pris // comme encadrant de l'expression régulière

  3. #3
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    Citation Envoyé par jibouze
    Par hasard, tu n'as pas besoin d'échapper aussi les / ?
    justement, dans ce cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (\[G\])[^\[\/G\]]*\[\/G\]

  4. #4
    Futur Membre du Club
    Inscrit en
    Juin 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 4
    Par défaut
    merci pour vos idée mais ca ne fonctionne pas parfaitement exemple :

    chaine suivante :

    mot2 [G] fdfG [/G]ff test [G] mot1 [/G] ggg [G] mot2 [/G] mot2

    au lieu de me renvoyer les trois chaines suivantes :

    [G] fdfG [/G]
    [G] mot1 [/G]
    [G] mot2 [/G]

    il ne me renvoi pas la première a cause de la présence du G dans le mot fdfG

    j'ai bien essayé avec des parenthèse mais c'est le meme problème : \[G\][^(\[/G\])]*\[/G\]

    franchement je trouve pas de solution

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 214
    Par défaut
    @ Auteur : justement, je partais du principe qu'il n'utilise PAS les / pour délimiter l'expression. Par exemple, moi j'utilise @.
    Bien sûr, je n'ai pas pris // comme encadrant de l'expression régulière
    Sinon, pour répondre à tarti, désolé, je n'arrive pas à utiliser le ^ sur une expression.

  6. #6
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    j'ai cette solution qui n'est pas terrible :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     var chaine = "un [G] deux2 trg/ggg/ois3 quatre 4 [/G] cinq [G] six [/G] sept";
     
     var exp = /((\[G\])\s{0,1}.*\s{0,1}(\[\/G\]))/gi;
     
     var tab = new Array();
     
     chaine = chaine.replace("[/G]","[/G]\n");
     
     tab = chaine.match(exp);
     alert("Résultat :\n\n"+tab);

    je remplace le "[/G]" par un "[/G]\n" avant d'appliquer l'expression régulière.
    Par contre j'ignore comment le script va se comporter avec des caractères spéciaux (\n, \t...)

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 31
    Par défaut
    Bonjour,

    L'expression régulière que tu as essayée n'inclut pas ton mot contenant un "G" pour cette raison: la liste [^ ... ] permet de donner l'ensemble des caractères non voulus. Puisqu'on y retrouve G dedans, ton mot est ignoré par la recherche. Je te suggère de généraliser ton critère d'exclusion en ignorant uniquement le caractère "]" au lieu de "[/G]".

    Évidemment, si tu fais usage d'un "]" dans n'importe quel cas entre deux balises [G][/G], ton mot sera aussi ignoré...

    Pour les cas mineurs, tu pourras t'inspirer de la solution de Auteur et gérer un caractère d'échappement devant ton "]", formater ta chaîne avant et après la regexp de remplacement.

    Sinon, si, par exemple, tu souhaites ajouter des "childNodes" dans tes balises "G" en utilisant de nouveau les balises "[" et "]" (exemple: [G]test [H] test 2 [/H][/G]), tu devras donner un ordre de priorité au traitement du script pour que tout sorte élégamment - soit traiter les balises H en premier, et les G ensuite... Tout dépend de la complexité éventuelle. ;-)

  8. #8
    Futur Membre du Club
    Inscrit en
    Juin 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 4
    Par défaut
    d'abord merci à vous pour toute vos réponses. Mais comme la dit freekind je suis dans un cas ou on peut tres bien avoir une chaine de caractères, à laquele on applique l'expression, de ce type [G]......[/G] ou meme ..[G]..[/G].. donc le problème est toujours présent. c'est vraiment dommage de ne pas pouvoir exclure une suite de caractères dans une expression régulière.

    Bref je vais essayé de trouver une autre solution. Merci a vous

  9. #9
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    une méthode un peu fastidieuse :

    • repère un [g] (ou une autre ouverture de balise) mémorise la position (méthode match() je crois)
    • Mémorise ensuite la position du [/g]
    • Fais un substring() entre les deux positions mémorisées.
    • à partir de la dernière position, repère les couples [g][/g] suivants
    • Une fois arrivé à la fin de la chaine, recommence du début avec une autre balise.


    Sinon pourquoi veux-tu récupérer le texte ? Visiblement tu cherches à faire de la mise en forme, un replace() peu suffire, non ?

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 214
    Par défaut
    Sinon, pour faire plus lourd et plus compliqué, tu peux envoyer une requête en ajax et traiter la chaine en php (qui est plus puissant en matière d'expressions régulières).
    Mais bon...

Discussions similaires

  1. probleme expressions régulieres
    Par Ganondorf dans le forum Langage
    Réponses: 12
    Dernier message: 14/10/2007, 20h57
  2. Probleme expression réguliere
    Par aikinhdo dans le forum Langage
    Réponses: 5
    Dernier message: 06/04/2007, 19h01
  3. probleme expression réguliere
    Par guiillaume63 dans le forum Langage
    Réponses: 1
    Dernier message: 28/06/2006, 14h45
  4. Probleme avec expression réguliere
    Par Raideman dans le forum Langage
    Réponses: 3
    Dernier message: 22/06/2006, 13h56
  5. [langage] problème expression régulière
    Par chtiboss dans le forum Langage
    Réponses: 6
    Dernier message: 05/01/2004, 16h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo