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 :

Array retour d'un match [RegExp]


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 11
    Points : 12
    Points
    12
    Par défaut Array retour d'un match
    Bonjour,

    J'avoue j'utilise peu javascript.

    J'ai un champ input d'un formulaire où j'ai besoin de récupérer un id à partir de 2 saisies possible:
    ou bien directement J'ai mis dans le bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    onclick="var c= $( \'#ic1\' ).val(); 
        var re= / \((\d+)\)$|^(\d+)$/; 
        var m=c.match(re);  
        alert(\'c:\'+c+\' m:\'+m.toString()); 
    ...
    Et donc en retour j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c:du texte (123) m: (123),123,
    ou alors
    Pourquoi ce dont j'ai besoin est soit dans l'indice 1 soit dans le 2 !?!
    Ou sinon quelle est la bonne méthode ?

    JP

  2. #2
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    C'est à cause des parenthèses capturantes. Regardons cette regexp d'un peu plus près :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var re = / \((\d+)\)$|^(\d+)$/
    Le problème survient au moment où la regexp est compilée. Les deux parenthèses capturantes sont référencées au même moment. La rouge obtient le numéro 1, et la verte le 2.

    Ensuite, au moment précis où la regexp est utilisée pour analyser du texte, il se trouve que le texte peut correspondre à un des deux choix séparés par le tube « | » : le choix de gauche ou le choix de droite. Il y a donc deux cas de figure :
    • le texte correspond au choix de gauche, le groupe numéro 1 reçoit quelque chose, le groupe 2 ne reçoit rien ;
    • le texte correspond au choix de droite, le groupe numéro 2 reçoit quelque chose, le groupe 1 ne reçoit rien.
    • (Bien sûr, il y a aussi le 3e cas de figure où le texte ne correspond simplement pas à la regexp.)


    Il est donc tout à fait normal que ce dont tu as besoin soit tantôt dans l'indice 1, tantôt dans le 2. En JavaScript, l'opérateur ou logique || permet de régler ce genre de cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var ceDontJAiBesoin = m[1] || m[2];
    Ce qui signifie littéralement : « prends m[1] s'il existe, sinon prends m[2] ». (Plus précisément, m[1] doit être équivalent à true, il sera donc « passé » s'il est null, undefined ou une chaîne vide.)
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    OK, j'ai compris.
    Explication très claire.

    Merci

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/08/2010, 09h21
  2. [Flex3] Pb AMFPHP quand retour array trop gros
    Par lonis dans le forum Flex
    Réponses: 0
    Dernier message: 13/07/2010, 09h50
  3. Réponses: 6
    Dernier message: 19/10/2009, 12h10
  4. Retour de fonction array
    Par zevince dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 05/04/2006, 15h09
  5. PB avec valeur retour array
    Par richton95 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 10/01/2006, 15h33

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