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 :

Modification regex positive lookbehind


Sujet :

JavaScript

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 84
    Points : 83
    Points
    83
    Par défaut Modification regex positive lookbehind
    Bonjour à tous ,

    J'ai un petit soucis sur une de mes expressions régulière

    Concrètement j'ai une expression utilisant un positive lookbehind, qui ne fonctionne donc pas avec tous les navigateurs.
    je cherche à extraire toutes les phrases d'une string entre des balises

    exemple :

    string : "<@>Bonjour<@> comment allez vous ?<@> Bien j'espère <@>"
    je cherche donc a récupérer "Bonjour", "comment allez vous ?" et "Bien j'espère"

    actuellement j'utilise ce regex:
    mais il me semble que des navigateurs comme firefox, ie ou safari n'aiment pas trop les " ?<= "

    Quelqu'un a t'il une solution pour modifier des expressions de ce type ?
    Sans pomme nous n'aurions jamais découvert la gravité... Sans tête Non plus.

  2. #2
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 451
    Points : 4 600
    Points
    4 600
    Par défaut
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var str = "<@>Bonjour<@> comment allez vous ?<@> Bien j'espère <@>";
    var split = str.split('<@>');
    split = split.splice(1, split.length-2);
    console.log(split);

    sinon, en regex :
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  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 637
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Malheureusement pas de look arounds an javascript dans les navigateurs ...

    Dans ton cas de figure...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    phrase="<@>Bonjour<@> comment allez vous ?<@> Bien j'espère <@>";
    reg=/[^<@>]+/g;
    console.log(phrase.match(reg));
    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
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    En JavaScript, les regex ont le lookahead (regarder devant) mais pas le lookbehind (regarder derrière).

    Le mieux que je peux proposer, c’est d’utiliser un groupe non capturant à gauche et un lookahead à droite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    const regex = /(?:<@>)(.*?)(?=<@>)/g;
     
    const text = "<@>Bonjour<@> comment allez vous ?<@> Bien j'espère <@>";
    let match;
    while (match = regex.exec(text)) {
      console.log(match);
    }
    // -> Array [ "<@>Bonjour", "Bonjour" ]
    // -> Array [ "<@> comment allez vous ?", " comment allez vous ?" ]
    // -> Array [ "<@> Bien j'espère ", " Bien j'espère " ]
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  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 637
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Il y a le look ahead ? j'ai toujours cru qu'il n'y avait pas de look around du tout...
    ça va me simplifier la vie ^^
    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
    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 637
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Dans ton cas de figure...
    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 éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Disons que le code n’exprime pas clairement l’intention ici. Un lecteur ou une lectrice qui débute en regex (ou simplement fatiguée) peut croire que la regex n’exclut que la séquence "<@>" entière, alors qu’en fait elle traite chacun des caractères séparément.
    On aurait pu écrire ceci :
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  8. #8
    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 637
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    sauf si il y a un < un > ou une adresse mail dans les "textes" ....

    le split me semble donc plus sûr
    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 !

Discussions similaires

  1. [Débutant] Modification de position d'un bouton sur Resize
    Par Masmeta dans le forum Windows Presentation Foundation
    Réponses: 8
    Dernier message: 30/04/2013, 17h23
  2. [C#] String Regex Position dans une chaine de caratère correspondant à un regex.
    Par jpbelmondo59 dans le forum Développement Windows
    Réponses: 1
    Dernier message: 09/06/2011, 13h41
  3. Modification souris (position au boot)
    Par roduce dans le forum KDE
    Réponses: 0
    Dernier message: 14/12/2007, 13h24
  4. Modification de la fenêtre d'affichage (position et dimension)
    Par DangerousBowlOfJelly dans le forum SDL
    Réponses: 8
    Dernier message: 21/11/2006, 07h57
  5. [XSLT] Modification d'une position de Sommaire sous XSLT
    Par citizen87 dans le forum XSL/XSLT/XPATH
    Réponses: 19
    Dernier message: 07/11/2006, 09h52

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