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 :

Expression reguliere


Sujet :

JavaScript

Vue hybride

Mike35 Expression reguliere 06/02/2006, 18h17
_Mac_ Y a plus simple : var... 06/02/2006, 18h48
Mike35 Expression reguliere 06/02/2006, 19h03
denisC Re: Expression reguliere 07/02/2006, 09h06
Mike35 C'est bon, du coup je fais... 07/02/2006, 10h18
siddh sinon : new RegExp ... 07/02/2006, 10h30
denisC Je te conseille plutot... 07/02/2006, 10h34
Mike35 Merci, je vais tester cette... 07/02/2006, 10h36
javatwister <script... 07/02/2006, 13h06
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Décembre 2005
    Messages : 117
    Par défaut Expression reguliere
    Bonjour à vous, et encore merci pour ce super site.
    Merci beaucoup !

    J'ai un petit problème, je dois récuperer les différentes valeurs d'une chaine de caractère séparée par un "|".
    J'ai pensé aux ecpressions reguliere mais ceci ne fonctionne pas.
    Voila ce que j'ai mis...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var chaine = "2|27|94|11|64|18|158|44" ;
    var Expression = new RegExp  ("[1-9]*\|");
    var tab = new Array();
    tab = Expression.exec(chaine);
    alert(tab[0]);
    Le problème, c'est que je ne récupère que la première occurence.
    Quelqu'un aurait il une solution ?

    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Y a plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var chaine = "2|27|94|11|64|18|158|44" ;
    var tab = new Array();
    tab = chaine.split("|");
    alert(tab[0] + " " + tab[1]);
    Exec ne fait pas exactement ce que tu crois que ça fait : http://www.webreference.com/js/column5/methods.html. Exec renvoie bien un tableau mais avec le premier élément matché en 0, et les expressions parenthésées ensuite.

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Décembre 2005
    Messages : 117
    Par défaut Expression reguliere
    Je te remercie pour la réponse mais sinon y'a pas une solution plus simple, car ensuite, je dois traiter ma chaine.
    Du coup il faudra que je fasse une boucle ? A la limite, pourquoi pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (var i=0;i<tab.length;i++)
    {
    tab[i] ....
    }
    Disons qu'en fait, je dois récuperer les valeurs des IDs (vu au dessus) et j'dois vérifier, par rapport au noeud courant dans mon xml, si leur parentNode ont cet ID ou pas.

    Ma 2ieme question serait:
    QUand je ne connais pas le nombre de parents dans mon fichier xml, existe il une fonction un peu comme hasChildNodes() qui me permettrait de ne pas faire planter mon programme si le noeud n'a pas de parent ?
    J'ai pensé a ancestor, mais ca ne fonctionne pas...

    Je te remercie d'avance.

  4. #4
    Expert confirmé

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut Re: Expression reguliere
    Citation Envoyé par Mike35
    Je te remercie pour la réponse mais sinon y'a pas une solution plus simple, car ensuite, je dois traiter ma chaine.
    Du coup il faudra que je fasse une boucle ? A la limite, pourquoi pas.
    Même dans le cas ou tu utiliserais une expression regulière, celle-ci ne ferait que te renvoyer les morceaux de chaines. A moins que tu ne souhaite que valider le format de ta chaine. Dans tous les cas, si tu veux transformer ta chaine en liste d'indice, il te faudra après faire une boucle sur cette liste.



    Citation Envoyé par Mike35
    QUand je ne connais pas le nombre de parents dans mon fichier xml, existe il une fonction un peu comme hasChildNodes() qui me permettrait de ne pas faire planter mon programme si le noeud n'a pas de parent ?
    Euh, alors là, c'est pas possible.... Un noeud a forcément toujours un parent, mis à part le document lui-même qui est l'ancetre de tous les noeuds. Mais pour tout autre noeud, il a forcément un parent. Tu peux nous dire si tu as rencontré un problème vis à vis de cette règle?

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Décembre 2005
    Messages : 117
    Par défaut
    C'est bon, du coup je fais une boucle au lieu d'utiliser une expression régulière et comme tu dis y'a pas trop le choix.

    Par contre vis à vis du ou des noeuds parents, j'ai encore un souçi (disons que c'est toujours le même qu'hier mais bon).
    Je t'explique...
    Je vais t'ecrire un petit bout de programme, des fois, ça vaut mieux qu'un long discours !

    j'ai un fichier XML... (qui peut avoir un arborescence infinie => donc que je ne connais pas. Exemple avec N4, N5, N6 en plus)
    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
        <N1 ID="1" L="Batiment 1" D="1">
          <N2 ID="3" L="Zone 1" D="1">
            <N3 ID="5" L="Piece 1" D="1" />
            <N3 ID="6" L="Piece 2" D="1" />
            <N3 ID="7" L="Piece 3" D="1" />
            <N3 ID="8" L="Piece 4" D="1" />
            <N3 ID="9" L="Piece 5" D="1" />
          </N2>
          <N2 ID="25" L="Zone 2" D="1">
            <N3 ID="26" L="Piece 1" D="1" />
            <N3 ID="27" L="Piece 2" D="1" />
            <N3 ID="28" L="Piece 3" D="1" />
            <N3 ID="29" L="Piece 4" D="1" />
            <N3 ID="30" L="Piece 5" D="1" />
          </N2>
        </N1>
    A ce moment je récupère un ID dans un autre fichier XML...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var IdDuPoint = nodeListPoint.item(i).getAttributeNode("S_id").nodeValue;
    A ce moment je dois vérifier si un de ses pères à l'ID=1 !!!
    Tout d'abord, je me positionne sur le noeud ayant l'ID trouvé (IdPoint).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var noeudPoint = xmlDoc.selectSingleNode("//*[@ID="+IdPoint+"]");
    ensuite je vérifie...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var Expression = new RegExp ('1',"gi");
    if(  Expression.test(noeudPoint.parentNode.attributes[0].nodeValue)
    || Expression.test(noeudPoint.parentNode.parentNode.attributes[0].nodeValue))					    
    {
          alert("OK");
    }
    Ceci fonctionne, mais étant donnée que je ne connais pas le nombre d'arborescence, ça ne marche que pour ce cas présent.
    Et également, si la valeur de l'ID trouvé vaut (exemple: IdDuPoint = 5), le programme (Expression.test()) plante, car le noeud n'a qu'un seul parent et non deux.

    Est ce que tu aurais une idée pour rendre la boucle générique, c'est à dire au point de vu de l'arborescence.

    Merci encore pour tout

  6. #6
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    sinon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    new RegExp  ("[1-9]*\|","g");
    le flag g te permet de récupérer tous les élèments

  7. #7
    Expert confirmé

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut
    Citation Envoyé par Mike35
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var noeudPoint = xmlDoc.selectSingleNode("//*[@ID="+IdPoint+"]");
    Je te conseille plutot d'utiliser la méthode DOM pour te positionner au bon endroit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var noeudPoint = xmlDoc.getElementById(IdPoint);
    A condition que ça fonctionne avec ID au lieu de id... A vérifier.

    Citation Envoyé par Mike35
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var Expression = new RegExp ('1',"gi");
    if(  Expression.test(noeudPoint.parentNode.attributes[0].nodeValue)
    || Expression.test(noeudPoint.parentNode.parentNode.attributes[0].nodeValue))					    
    {
          alert("OK");
    }
    Est ce que tu aurais une idée pour rendre la boucle générique, c'est à dire au point de vu de l'arborescence.
    Problème très commun dans toutes les représentations en arbre. Quelque chose de ce genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    var noeud = .... (le noeud duquel tu pars)
    while (noeud.parentNode) {
      noeud = noeud.parentNode;
      if(noeud.id == "1") {
        alert("ok!!");
        break;
      }
    }
    Voila, j'ai la encore utilisé l'id DOM plutot que l'adressage par attributs. J'ai supprimé ton expression regulière qui était fausse et ne servait, à mon avis, à rien.
    Il faut vérifier que break fonctionne bien, sinon mettre une condition d'arrêt autre dans la boucle.

    Bonne chance

  8. #8
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Décembre 2005
    Messages : 117
    Par défaut
    Merci, je vais tester cette boucle, merci encore...

  9. #9
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    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
    <script type="text/javascript">
     
    var chaine = "2|27|94|11|64|18|158|44" ; 
    var Expression = /\d+/g; 
     
    var tableau=new Array(); 
    var resultat; 
     
    while((resultat=Expression.exec(chaine))!=null){ 
       tableau.push(resultat) 
    } 
     
    alert("Chaînes trouvées: "+ tableau.join(" - "));
     
    </script>

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

Discussions similaires

  1. [langage] [Expression][Régulière] motif
    Par Cyspak dans le forum Langage
    Réponses: 4
    Dernier message: 23/09/2003, 14h24
  2. [langage] [debutant] expression reguliere
    Par toto_titi dans le forum Langage
    Réponses: 3
    Dernier message: 01/07/2003, 09h45
  3. Réponses: 2
    Dernier message: 16/06/2003, 15h15
  4. [langage] surement une expression régulière...
    Par armada dans le forum Langage
    Réponses: 5
    Dernier message: 30/05/2003, 17h06
  5. [langage] expression reguliere motif répétitif dans 1 pattern
    Par comme de bien entendu dans le forum Langage
    Réponses: 11
    Dernier message: 09/04/2003, 16h14

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