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 :

Détecter des combinaisons dans une chaine une par une [RegExp]


Sujet :

JavaScript

  1. #1
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut Détecter des combinaisons dans une chaine une par une
    Bonsoir,

    J'aimerais analyser une chaine et retrouver plusieurs combinaisons de caractères dans cette chaine (plusieurs en nombre mais en sorte aussi) et ce, une à la fois afin de faire un traitement sur chacune.

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var chaine = "abcd||12ef||3ghi||456klm||12op||12"
    var combinaison1 = "||12";
    var combinaison2 = "||3";
    var combinaison3 = "||456";
    Je manipule fort mal les expressions régulières et je me demandais si c'était possible de vérifier tout cela en y allant au cas par cas. D'abord je m'occupe de la première combinaison que je rencontre, je fais un traitement, ensuite je m'occupe de la seconde, je fais un traitement, etc.

    Sinon, je vais parcourir caractère par caractère et je trouvais ça un peu moche.

    C'est donc une question théorique. Je cherche à savoir où m'orienter avant de tester.


    Edit: Je n'ai pas donné assez de renseignements. J'aimerais savoir aussi quelle combinaison a été détectée et où. J'ai pensé à boucler sur des indexOf() mais comment faire pour chercher toutes les combinaisons en une seule instruction ? indexOf(regExp) ? Mais alors, comment saurais-je quelle combinaison a été retrouvée ? Hum, plus j'y réfléchis, plus je m'éloigne de la solution, je pense.

  2. #2
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    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 681
    Points : 5 221
    Points
    5 221
    Par défaut
    salut

    bon, voilà un truc pas beau ni clair du tout mais essaie-le déjà et tu me diras si ça correspond à ton but:

    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
    <script type="text/javascript">
     
    var chaine = "abcd||12ef||3ghi||456klm||12op||12";
    var chaine2 = chaine;// copie de ta chaîne;
     
    var combinaison1 = "||12";
    var combinaison2 = "||3";
    var combinaison3 = "||456";
     
     
    l=[]; // tableau vide;
    q=0;// variable sauvegardant le nombre de caractères retranchés à "chaine";
     
    tot=chaine.match(/\|\|\d+/g).length;// nombre de correspondances dans la chaîne;
     
    while(tot){
    	r=chaine2.match(/\|\|\d+/);// 1ère correspondance trouvée
    	l.push(r[0]+" (position: "+(q+r.index)+")" );// ajout dans le tableau de l'expression trouvée avec sa position dans "chaine";
     
    	q+=r.index+r[0].length;// incrémentation de "q";
    	chaine2=chaine.substring(q);// on retranche les premiers caractères de chaine2, jusqu'à q; 
    tot--
    }
     
    alert(l);
    </script>

  3. #3
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut
    A première vue, ça semble me convenir parfaitement. Je m'en rendrai compte en implémentant bien entendu. Mais avant ça, je vais revoir l'expression régulière car je n'ai pas mis toutes les combinaisons possibles et leur structure varie dans certains cas.
    C'est ton r.index qui me sauve avec le length des match. Merci bien.

    Je laisse le post ouvert pour l'instant.

  4. #4
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut Ma tête va exploser
    Je deviens fou, je ne parviens pas à distinguer des doublons de triplets et de ne pas compter un triplet comme un doublon et un triplet:

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
    "$dd $ddd".match(/\$dd|\$ddd/g);
    "$dd $ddd".match(/\$dd$|\$ddd/g);
    "$dd $ddd".match(/\$(dd)$|\$ddd/g);
    ...


  5. #5
    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 634
    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 634
    Points : 66 650
    Points
    66 650
    Billets dans le blog
    1
    Par défaut
    \b word boundary ...
    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 !

  6. #6
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    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 681
    Points : 5 221
    Points
    5 221
    Par défaut
    attention, avec le flag global, l'index de la correspondance ne sera pas pris en compte correctement; d'où la boucle que je t'avais proposée;

    (pour le reste, je ne dis rien, j'attends de comprendre où tu veux en venir)

  7. #7
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut
    Merci SpaceFrog, je n'avais pas imaginé que cela me convenait parfaitement.

    Patience, javatwister, j'arrive bientôt à mon but initial. Ensuite je le compléterai peut-être et puis je le nettoierai un tant soit peu.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 01/08/2013, 15h57
  2. Réponses: 6
    Dernier message: 28/12/2011, 13h00
  3. Réponses: 4
    Dernier message: 25/08/2011, 09h27
  4. Réponses: 2
    Dernier message: 06/03/2009, 09h32
  5. [RegEx] Remplacement d'une chaine entre { } par une valeur
    Par phpiste dans le forum Langage
    Réponses: 13
    Dernier message: 08/02/2008, 23h35

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