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 :

regExp et match [RegExp]


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de the-destroyer
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 204
    Par défaut regExp et match
    Bonsoir,

    je cherche a isoler certaine partie d'une chaine de caractère avec match,
    les éléments serait pris à partir du caractère ":" et finirai soit par un "." soit par ")".
    Voila mon code actuel mais il ne marche pas, je ne trouve pas pourquoi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var carac = "textext:textext().textextext:textextext()",
    find = carac.match(/:((.)*)\.|\)/g);
     
    // find retourne: [":textext().", ")"]
    merci d'avance pour votre aide !

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

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Essaye ça, si j'ai pas compris de travers ce que tu veux obtenir.
    Code regexp : Sélectionner tout - Visualiser dans une fenêtre à part
    /:([^.)]+)(?:\.|\))/g
    Selon moi il y a 3 difficultés avec les regexp :
    1- maîtriser la syntaxe
    2- savoir exactement ce qui doit correspondre
    3- savoir exactement ce qui ne doit pas correspondre

    Tu as mis un (.)* à la place d'un (.*), ce qui me laisse penser que tu te heurtes à ma diffculté n°1 , mais mettons-ça sur le compte de la fatigue
    Je t'ai mis un + au lieu d'une *, car je pense que trouver une chaîne vide ne t'intéresse pas. De plus, j'ai remplacé le point par une classe [^.)] qui signifie « tout sauf point et parenthèse droite ».
    Après ça on a un groupe non capturant : (?: … ). C'est comme un groupe parenthésé normal sauf que le résultat n'est pas conservé. Ça améliore les performances. Et pourquoi un groupe à cet endroit ? C'est pour le pipe « | » : si on n'en met pas, il coupe toute la regexp en deux (pour voir, compare /ab|c/ et /a(?:b|c)/).



    Au fait, juste par curiosité : pourquoi tu as besoin de ça ?
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Membre confirmé Avatar de the-destroyer
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 204
    Par défaut
    Merci de répondre, mon opinion sur tes compétence sont maintenant confirmé ^^

    bref, je construis un framework, travaillant sur le moteur de sélection des éléments de la page pour le moment, je souhaite que l'utilisateur puisse le modelé un maximum, c'est a dire, ajouté s'il le désire un moyen de sélection similaire a ce qu'il existe actuellement telle les pseudos classe par exemple, appelons les les sélecteurs, mais pour ce que je t'ai demandé c'est une fonction a part dont je te parlerais plus tard si tu le désires bref par une boucle, je parcourt chaque caractère entré (ex:$("div[id]")), et dès qu'un caractère correspond au caractère identifiant a un des sélecteurs, () la fonction désigné est apellé, par exemple, ici, la fonction nommé "[" serait appellé lorsque le caractere "[" serait verifier.

    jusque la tout vas bien ? Que pensse tu de ce moyen de parcourt ? j'ai deja essayé avec des regExp mais c'etait une vrai usine a gaz

  4. #4
    Membre confirmé Avatar de the-destroyer
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 204
    Par défaut
    awi et le code que tu m'a donné ne marche pas :/

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

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Citation Envoyé par the-destroyer Voir le message
    Merci de répondre, mon opinion sur tes compétence sont maintenant confirmé ^^
    C'est du bluff

    Citation Envoyé par the-destroyer Voir le message
    awi et le code que tu m'a donné ne marche pas :/
    En fait je faisais mes tests avec la méthode exec des regexp, en oubliant que String.match et RegExp.exec ne se comportent pas tout à fait pareil…

    Code console : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> var carac = "textext:textext().textextext:textextext()"
    >>> var rx = /:([^.)]+)(?:\.|\))/g
    >>> rx.exec(carac)
    [":textext()", "textext("]
    >>> rx.exec(carac)
    [":textextext()", "textextext("]
    >>> rx.exec(carac)
    null

    exec renvoie un tableau. En 0, on a la correspondance totale, et en 1, 2, etc., les différents groupes capturés. Les regexp avec l'option g ont une propriété lastIndex qui évolue à chaque nouvelle recherche, un peu comme les mysql_fetch en PHP.

    En gros faut faire une boucle while (tab = rx.exec(carac)) et travailler avec tab dans cette boucle. Récupère tab[1], c'est le groupe capturé qui nous intéresse. Et tu as vu, il reste une parenthèse gauche qui traîne, j'ai suivi à la lettre les « spécifications » de ton premier post

    Citation Envoyé par the-destroyer Voir le message
    Que pensse tu de ce moyen de parcourt ?
    J'en pense que ça ressemble furieusement à un automate d'analyse lexicale L'analyse lexicale est une technique utilisée en compilation. Si tu trouves des cours en ligne pas trop compliqués là-dessus, ça devrait t'intéresser
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  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 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 658
    Billets dans le blog
    1
    Par défaut
    en conservant le match:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var carac = "textext:textext().textextext:textextext()",
    find = carac.match(/:[^:]*(\.|\))/g);
    alert(find)
    retourne :textext().,:textextext()

    c'est pas le resultat recherché ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    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
    d'accord SF, j'aurais dit pareil (sauf info en plus)

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

Discussions similaires

  1. [RegExp] pattern matching adapté
    Par thierry_b dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 06/07/2009, 18h13
  2. [RegExp] string.match() difficile
    Par PaC_1250 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 25/05/2007, 13h24
  3. [Regexp] String.matches
    Par scifire dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 21/11/2005, 17h25
  4. Réponses: 7
    Dernier message: 27/07/2005, 12h41

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