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 :

replace qui ne remplace qu'une occurrence


Sujet :

JavaScript

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 319
    Par défaut replace qui ne remplace qu'une occurrence
    Salut !

    Quelqu'un saurait me dire pourquoi cette instruction ne remplace pas toutes les occurrences de "red", "green" et "blue" ? On dirait que lorsqu'une occurrence en suit une autre elle n'est pas remplacée...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var subject = "red black green blue yellow orange red blue pink orange white green";
    var pattern = /(?:^|[^\w])(red|green|blue)(?:[^\w]|$)/g;
    var result = subject.replace(pattern, "%");
    J'aimerais tant que possible éviter d'avoir à faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var result = null;
    var replacement = subject;
    do {
        result = replacement;
        replacement = result.replace(pattern, "%");
    }
    while(result != replacement);

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Mai 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 345
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var pattern = /(^|\s+)(red|green|blue)(\s+|$)/g;

  3. #3
    Membre éclairé
    Avatar de witch
    Inscrit en
    Mai 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2007
    Messages : 346
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     var pattern = /(^|[^\w]*?)(red|green|blue)([^\w]*?|$)/g;

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Mai 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 345
    Par défaut
    bon là elle marche, arf je suis nul

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var pattern = /(^|\s*)(red|green|blue)(\s*|$)/g;
    pas besoin d'avoir une longue regexp

  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
    un mot peut être suivi de ponctuation ..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var pattern=/\b(red|green|blue)\b/g
    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 expérimenté
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 319
    Par défaut
    Merci pour toutes vos réponses !

    Par contre je ne suis pas vraiment plus éclairé sur ma question : "pourquoi"...

  7. #7
    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
    parce que ton pattern n'autorise pas la multiplicité des chianes recherchées ...

    tu as :
    debut blablabla (red|green|blue) blablabla fin

    qui n'autorise pas de blabla entre les occurrences des red green et blue ...
    il faut cibler au plus juste donc juste les mots eux mêmes (entourés de 'non-mots' )
    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 !

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 319
    Par défaut
    En effet, \b est plus approprié même si pour mon cas le sujet testé est toujours de la forme exposée initialement.
    Mais finalement, ce que je n'arrive pas à cerner c'est le fonctionnement du "g" en fin d'expression - et j'avoue être un peu pris par le temps pour en étudier le fonctionnement exact. Au fond, je pensais que l'expression était sans cesse ré-appliquée tant qu'il y avait une correspondance dans la chaîne mais ce n'est visiblement pas le cas.

  9. #9
    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
    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 !

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 319
    Par défaut
    Merci - même si je n'en aurai pas l'utilité cette fois-ci.

  11. #11
    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
    je crois que le souci que tu as par rapport au g provient surtout de l'utilisation de ^et $ dans ta regexp ...
    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. Replace qui ne remplace pas :s
    Par ced600 dans le forum C#
    Réponses: 4
    Dernier message: 28/03/2008, 14h18
  2. le body.replace qui remplace pas
    Par zooffy dans le forum ASP.NET
    Réponses: 16
    Dernier message: 18/01/2008, 13h57
  3. Replace - remplacement dans une chaine
    Par petiteso dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 28/06/2007, 11h14
  4. Réponses: 5
    Dernier message: 12/11/2006, 15h47
  5. String.replace qui ne remplace rien
    Par linar009 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 23/08/2006, 11h04

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