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 entre crochets


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut Regexp entre crochets
    Bonjour,

    J'ai une chaine:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tmp = "[ABC]Montexte1[/ABC][ABC]Montext2[/ABC]";
    Je cherche à obtenir un tableau contenant Montexte1 et Montexte2.

    J'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var optvalue = new RegExp("\[ABC\](.+)\[/ABC\]", "g");
    var tabopt = optvalue.exec(tmp);
    for (var i = 0; i < tabopt.length; i++){
       alert(tabopt[i]);
    }
    Mais bon, j'ai des alert de portions de phrases totalement fausses.
    Comment faire?
    Merci

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 162
    Par défaut
    Pour la regexp, il te suffit de rajouter un ? à '.+' pour que la regexp traite tes 2 cas et non un seul "gros"...

    Voici une solution avec en paramètre la chaine à traiter, et le "motif" de la balise :

    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
    tmp = "[ABC]Montexte1[/ABC][ABC]Montext2[/ABC]";
     
    function extract(chaine,motif)
    {
        var resultats = new Array();
        var reg = new RegExp("\\["+motif+"\\](.+?)\\[/"+motif+"\\]", "ig");
        var tabopt = tmp.match(reg);
        for (var i = 0; i < tabopt.length; i++){
           var reg2 = new RegExp("\\["+motif+"\\](.+?)\\[\/"+motif+"\\]", "ig");
           resultats.push(tabopt[i].replace(reg2, "$1"));
        }
        return resultats;
    }
     
    document.write(extract(tmp,"ABC"));

    Il y a peut-être (surement même) une version plus "courte" (1 seule regexp ?), mais celle-là a l'air de fonctionner...

    A+

  3. #3
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    chaine="[ABC]Montexte1[/ABC][ABC]Montext2[/ABC]";
    reg=/(\[\/?ABC\])/g;
    tab=chaine.split(reg);
    alert(tab)
    [edit]
    simplification de la regExp
    [/edit]
    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 !

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 162
    Par défaut
    J'y avais pensé SpaceFrog, mais je m'étais projeté sur un cas plus complexe que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "[ABC]MonTexte1[/ABC][ABC]MonTexte2[/ABC]"
    comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "[ABC]MonTexte1[/ABC]MonTexte3quejeneveuxpas[ABC]MonTexte2[/ABC]"
    et dans ce cas, le split renvoie le texte3...

    A+

    PS : la regexp peut même être plus simple avec le split :
    [Edit]même optimisation de regexp [/Edit]

  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 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
    +1 BaBeuh
    reste a savoir si il peut avoir su texte entre ...

    si c'est le cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    reg=/\[\/?ABC\]|\[\/?ABC\].[^\[]*/;
    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
    Membre éprouvé
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Par défaut
    Merci ça fonctionne très bien, mais j'aimerais juste comprendre:
    - le premier slash /
    - les parenthèse (c'est ce qu'il y a entre qui doit être renvoyé? Donc ça ça renverrait le [ABC] ?)

    Merci

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 162
    Par défaut
    Le premier slash correspond à la syntaxe abrégée pour déclarer une expression régulière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new RegExp(expression,flags)
    est équivalent à
    Sinon, les parenthèses servent en général à capturer un bloc (pratique pour la fonction replace, $xx référencant le contenu du xxème bloc de parenthèse)... mais ici, si je ne me trompe, elles sont inutiles et peuvent disparaître :


Discussions similaires

  1. Références entre crochets !?
    Par walou dans le forum Débuter
    Réponses: 2
    Dernier message: 12/06/2008, 17h46
  2. Utilité des entre crochets en t-sql
    Par Lucas Panny dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 19/05/2008, 08h26
  3. Supprimer mot entre crochets en shell
    Par sebcah dans le forum Linux
    Réponses: 2
    Dernier message: 05/05/2008, 12h21
  4. Regex pour extraire un lien entre crochets
    Par elwario91 dans le forum Bibliothèque standard
    Réponses: 1
    Dernier message: 26/03/2008, 11h34
  5. Réponses: 8
    Dernier message: 16/11/2007, 22h11

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