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 :

Difficulté avec une expression rrationnelle [RegExp]


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Points : 43
    Points
    43
    Par défaut Difficulté avec une expression rrationnelle
    Bonjour,

    J'ai quelques difficultés avec une expression régulière.
    J'ai un texte qui a la forme suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    blabla....
    Vocabulaire spécifique de la classe  1 :
     droit+(7), imperia+l(29), vasculaire+(6), analyse+(7), carte+(7), collegue+(12), colleg+16(26), eq
    uipe+(14);
     
    Vocabulaire spécifique de la classe  2 :
     dechaine+(6), grand+(6), injustifiable+(10), nai+f(6), veritable+(6), fevrier+(8), cohorte+(8), de
    ficit+(8);
     
    ....
    ...
     
    Vocabulaire spécifique de la classe 10 :
     dechaine+(6), grand+(6), injustifiable+(10), nai+f(6), veritable+(6), fevrier+(8), cohorte+(8), de
    ficit+(8);
    ...etc
    blabla
    Je voudrais en faite récupérer les mots donc j'ai fait l'expression régulière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     var expReg = new RegExp('  Vocabulaire spécifique de la classe\\s{1,2}[0-9]{1,2} :\\r\\n\\s(.*);',"g");
    Mais cette expression ne fonctionne pas.
    J'ai donc essayé l'expression suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var expReg = new RegExp(' Vocabulaire spécifique de la classe\\s{1,2}[0-9]{1,2} :\\r\\n\\s([a-zA-Z0-9_,()+ \r\n<.]{0,});',"g")
    J'ai donc simplement remplacé .* par une liste qui contient tous les caractères qu'on peut trouver. Et ca marche.., je recupere
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    droit+(7), imperia+l(29), vasculaire+(6), analyse+(7), carte+(7), collegue+(12), colleg+16(26), eq
    uipe+(14);
     dechaine+(6), grand+(6), injustifiable+(10), nai+f(6), veritable+(6), fevrier+(8), cohorte+(8), de
    ficit+(8);
    ....
    Je voudrais juste comprendre pourquoi la première expression ne fonction pas?

    Merci d'avance !!

  2. #2
    Membre averti Avatar de blade159
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2004
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 226
    Points : 332
    Points
    332
    Par défaut
    Bonjour,

    dans la première expression :

    • le signe . signifie "n'importe quel caractère à cet endroit" ;
    • le signe * signifie "le dernier signe avant l'étoile est répété 0 ou un nombre de fois au choix".

    ce qui n'a pas de sens...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Points : 43
    Points
    43
    Par défaut
    Je sais pas si j'ai bien compris ce que tu a dit. Je crois que tu es en train de me faire comprendre qu'on peut pas utiliser .* ensemble parce que ca n'a aucun sens.
    Mais par exemple sur le site de mozilla https://developer.mozilla.org/fr/Cr%...3%A9sum%C3%A9s
    il dit que .* coïncide avec n'importe quelle combinaison de caractères.
    Donc j'avoue que je suis un peu perdu ??

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    Un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <script type="text/javascript">
    function bar(){
    var reg=/(\d+)\s*:\n?\s*([^;]+);?/gim
    var matches
    var classe = new Array()
    var chaine=document.getElementById('foo').innerHTML;
    while (matches = reg.exec(chaine)){
    classe[RegExp.$1*1]=RegExp.$2.split(/\+[^,]+,?\s*/);
    }
    alert(classe[1][5])
     
    }
    </script>
    </head>
    <body onload="bar()">
    <div id="foo" >Vocabulaire spécifique de la classe  1 :
     droit+(7), imperial+(29), vasculaire+(6), analyse+(7), carte+(7), collegue+(12), colleg+16(26), equipe+(14);
     
    Vocabulaire spécifique de la classe  2 :
     dechaine+(6), grand+(6), injustifiable+(10), naif+(6), veritable+(6), fevrier+(8), cohorte+(8), deficit+(8);
     
     
    Vocabulaire spécifique de la classe 10 :
     dechaine+(6), grand+(6), injustifiable+(10), naif+(6), veritable+(6), fevrier+(8), cohorte+(8), deficit+(8);
    </div>
     
    </body>
    </html>
    je récupère ainsi dans un tableau classe[index] les mots

    classe[1][0] => droit
    classe[10][3] => injustifiable

    Attention toutefois :
    collegue+(12), colleg+16(26),
    on recupère quoi ? colleg ???

    nai+f(6) => ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Points : 43
    Points
    43
    Par défaut
    Ouf... je viens de comprendre tes expressions régulières.

    Pour la 1ère expression, pas bête d'utiliser le petit [^,].
    Par contre je comprends pas l'attribut m, j'ai essayé de trouvé dans des tutoriels, mais il parle que de g et i.

    Pour la 2ème, je ne pense pas quelle va fonctionner. Mais c'est de ma faute j'ai pas expliquer correctement le texte que j'avais.
    Donc voici quelques détails sur mon texte :
    - les mots peuvent finir par + ou . ou < ou rien
    la(28) => la
    argument<(8) => argument<
    faire.(8) => faire.
    libre+ => libre
    - chaque mot est séparé par une virgule et le vocabulaire spécifique de chaque classe est séparer par un point virgule.

    Voici aussi les réponses à tes questions
    - pour collegue+(12) => collegue+
    - pour colleg+16(26) => colleg+16
    - pour nai+f(6) => nai+f
    En faite, je veux récupérer les mots en entiers qui sont devant les parenthèses, peut n'importe qu'il est des points, tirets...

    J'aurais également des questions sur classe[RegExp.$1*1], je comprends pas ce que tu fais.
    RegExp.$1 récupère le numéro de la classe, mais que veut dire *1.

    Et sais-tu ce que fait réellement le code .* dans une expression régulière ?

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    classe[RegExp.$1*1]=RegExp.$2.split(/\([^,]+,?\s*/);
    pour le *1 c'est juste pour éviter d'avoir un array litteral
    le regexp retournant du string, je le "caste" en numérique en le multipliant par 1
    mais on peut stocker les données autrement ...

    le m c'est pour multiligne mais c'est un reflexe php ...
    je ne pense pas que ce soit implémenté en javascript.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Points : 43
    Points
    43
    Par défaut
    Merci beuacoup pour ton aide!! ça fonctionne

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] Couper un mot avec une expression réguliere ?
    Par mLk92 dans le forum Langage
    Réponses: 4
    Dernier message: 24/08/2006, 09h34
  2. [RegEx] Difficultés avec une expression réguliere
    Par saint-pere dans le forum Langage
    Réponses: 10
    Dernier message: 24/06/2006, 13h47
  3. Problème avec une expression rationnelle.
    Par Pragmateek dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 11/06/2006, 20h34
  4. [RegEx] probleme avec une expression reguliere
    Par SharKeR dans le forum Langage
    Réponses: 9
    Dernier message: 07/04/2006, 16h50
  5. [VBA] difficultés avec une requête INSERT
    Par elias dans le forum Access
    Réponses: 7
    Dernier message: 06/09/2005, 14h53

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