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 :

Méthode exec() de RegExp


Sujet :

JavaScript

  1. #1
    Membre régulier Avatar de _FaFa_
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 103
    Points : 111
    Points
    111
    Par défaut Méthode exec() de RegExp
    Bonjour,

    Je cherche à créer une arborescence dynamiquement. Pour cela j'effectue une requête coté serveur qui me renvoie les données. Grâce à Json je peux utiliser mes données en javascript. Seulement je souhaite reproduire l'arborescence d'un système linux par exemple et mes enregistrements sont du genre "/home/.../...". je dois donc extraire /home à l'aide de exec.

    Voici mon code:

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    var http = createRequestObject();
    http.open('GET', './path.php', true);
    http.onreadystatechange = (function ()
    {
    	if (http.readyState == 4)
    	{
    	        if (http.status == 200)
            	{
              		var personnes = validateJSON(http.responseText);
              		if (personnes !== false)
              		{         						
               			var nod = new Array("");
               			var reg = new RegExp("^/[A-Za-z0-9]*/","g"); 
               			var resultat = 0;
                                    // Boucle i         						
                			for (var i in personnes)
                			{
                				var resultat = 0; 
                  				var personne = personnes[i];
                  				personne = reg.exec(personne.path);
                                            // Boucle j
                  				for (var j in nod )
                  				{
                  				        if (personne == nod[j] )
                  					{
                  						resultat = 1;
                  					}
                  				}
                  				if ( resultat == 0 )
                  				{	
                                                    // Ajout du noeud dans le treeview
    					        var tempNode = new YAHOO.widget.TextNode(personne, node, false);
                                                    // Ajout du dernier noeud dans le tableau
    						nod.push(personne);
    					}
                			}
              		}
              		else
              		{
                		document.getElementById('resultat').innerHTML = "JSON invalide";
              	}
            }
            else
            {
            	alert('Pas glop pas glop');
            }
     }
     });
    Mon problème est le suivant. Au premier tour de la boucle i, personne = reg.exec(personne.path) prend la bonne valeur, le tour suivant ça prend la valeur NULL, le tour suivant la bonne valeur, le tour suivant la valeur NULL et ainsi de suite.

    Voyez-vous d'où peux venir le problème ?

    Merci d'avance,

    _FaFa_

  2. #2
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut
    bonjour,

    j'ai eu un problème similaire avec la méthode test() (voir cette discussion)

    Visiblement cela vient du fait que lastIndex n'est pas réinitialisé dans le cas où exec() renvoit autre chose que null (pas déchec dans la recherche).

    voir le cours de Jacques Guizol sur méthodes test() et exec()

    Citation Envoyé par Jacques Guizol
    Par ailleurs, en cas d'appariement, cette méthode actualise lastIndex, si bien que si elle est rappelée avec la même référence, elle procède à une nouvelle recherche à partir de cet emplacement. Comme pour la méthode précédente, en cas d'échec, lastIndex est remis à 0.
    Dans le cas de la méthode test(), j'ai donc réinitialisé lastIndex comme ceci (pour que la recherche suivante se fasse à partir du début de la chaîne) :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    exp.test("");
    peut-être qu'avant de rappeler la méthode exec() tu devrais réaliser cette opération pour réinitialiser la propriété lastIndex :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    reg.exec("");

  3. #3
    Membre régulier Avatar de _FaFa_
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 103
    Points : 111
    Points
    111
    Par défaut
    Merci Auteur, tu avais raison, il faut réinitialisée à chaque tour de boucle.

    Cependant je viens de remarqué un autre problème dans mon code qui se situe au niveau de ma condition dans ma boucle j :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (personne == nod[j] )
    Je fait affiché les deux valeurs à chaque fois, et je remarque qu'elles sont parfois identiques mais ce derniers ne rentre pas dans la condition

    Quelqu'un a une idée ?

  4. #4
    Membre régulier Avatar de _FaFa_
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 103
    Points : 111
    Points
    111
    Par défaut
    Ok, avec un cast ca marche, en faisant :

    if (personne.toString() == nod[j] )
    La condition est donc validée lorsque les valeurs correspondent.

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

Discussions similaires

  1. [JApplet] Méthode exec
    Par stailer dans le forum Applets
    Réponses: 2
    Dernier message: 05/07/2009, 13h29
  2. execution d'un tar via méthodes exec()
    Par totoche dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 18/06/2009, 10h48
  3. Alternative à la méthode exec()?
    Par spl0tch dans le forum Java ME
    Réponses: 7
    Dernier message: 21/07/2008, 13h01
  4. Runtime.getRuntime().exec(String) méthode sort
    Par devAd dans le forum Langage
    Réponses: 4
    Dernier message: 28/11/2006, 13h53
  5. [Runtime] Problème avec la méthode 'exec'
    Par regisba dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 25/08/2006, 13h36

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