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 :

remplacement de sous-chaîne [RegExp]


Sujet :

JavaScript

  1. #1
    Membre averti
    Homme Profil pro
    Collégien
    Inscrit en
    Mai 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Collégien
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 11
    Par défaut remplacement de sous-chaîne
    Bonjour,
    voici mon problème actuel ...

    Disons cette chaîne ci;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var test = "<troll>troll on</troll><pandi> <troll>kikou</troll> toi <panda> ca va ?</panda> Oui ! </pandi>aba<troll>troll off </troll>";
    Dont je voudrai avoir au final ceci;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var res = "<troll>troll on</troll><pandi> kikou toi  ca va ? Oui ! </pandi>aba<troll>troll off </troll>";
    Donc un pattern qui fasse une recherche entre 2 balises et de remplacer dans cette recherche les mots-clés (tous !!) par "rien".

    J'ai fait ceci;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert(test.replace(/(.*)(<pandi>)(.*)(<\/?troll>|<\/?panda>)(.*)(<\/pandi>)(.*)/gm,"$1$2$3$5$6$7"));
    Les mots-clés ici sont donc :
    - <troll>
    - </troll>
    - <panda>
    - </panda>

    actuellement mon pattern fait la moitié du boulot, à savoir qu'il va trouver un "mot clé"(vers le debut du String) le remplacer, trouvé un 2ème (vers la fin du String)le remplacer et voila ...

    Merci d'avoir lu !

  2. #2
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    La partie "suppression des occurrences des mots-clefs" est triviale en elle-même. As-tu envisagé de procéder en deux temps ? Je veux dire :
    1) isoler d'abord la partie de chaine à nettoyer à coup d'indexOf
    2) supprimer ensuite toutes les occurrences voulues dans la sous-chaine sans difficultés de position dans la chaine

    Ca permettrait de faire l'économie d'une grosse et grasse RegExp ^^ mais je ne rejette pas la solution RegExp en bloc, hein, c'est une suggestion

    edit :
    ça pourrait ressembler à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var test = "<troll>troll on</troll><pandi> <troll>kikou</troll> toi <panda> ca va ?</panda> Oui ! </pandi>aba<troll>troll off </troll>";
    var BALISE_DEBUT = "<pandi>";
    var BALISE_FIN = "</pandi>";
    var debut = test.indexOf(BALISE_DEBUT) + BALISE_DEBUT.length;// pour se placer après la balise et non pas à son premier caractère
    var fin = test.indexOf(BALISE_FIN);
    var zoneATraiter = test.substring(debut, fin);
    test = test.replace(zoneATraiter, zoneATraiter.replace(/<\/?(troll|panda)>/g, ""));
    (plus verbeux qu'une RegExp globale, j'en conviens, mais maintenabilité et lisibilité comparatives à discuter )

  3. #3
    Membre averti
    Homme Profil pro
    Collégien
    Inscrit en
    Mai 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Collégien
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 11
    Par défaut
    Merci pour cette réponse,
    cependant pour le cas ou j'ai la nécessite de faire ce "remplacement" plusieurs fois, indexOf() ne va t'il ne pas retourner a chaque fois la même occurrence?

    edit: Je viens de chercher et trouvé qu'il prend en fait un paramètre qui permet de dire à partir de ou cherché '^^

  4. #4
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    On pourrait même simplifier les appels en systématisant l'ensemble, genre :
    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
     
    String.prototype.exclureBalises = function(balisesATraiter, balisesASupprimer) {
    	var debut, fin, baliseDebut, baliseFin, zoneDeTravail, exclusions, retour;
    	retour = this;
    	for (var i = 0, iMax = balisesATraiter.length; i < iMax; ++i) {
    		baliseDebut = "<" + balisesATraiter[i] + ">";
    		baliseFin = "</" + balisesATraiter[i] + ">";
    		debut = retour.indexOf(baliseDebut) + baliseDebut.length;
    		fin = retour.indexOf(baliseFin);
    		zoneDeTravail = retour.substring(debut, fin);
    		exclusions = new RegExp("</?(" + balisesASupprimer.join("|") + ")>", "gi");
    		retour = retour.replace(zoneDeTravail, zoneDeTravail.replace(exclusions, ""));
    	}
    	return retour;
    };
     
    var test = "<troll>troll on</troll><pandi> <troll>kikou</troll> toi <panda> ca va ?</panda> Oui ! </pandi>aba<troll>troll off </troll>";
    alert(test.exclureBalises(["pandi"], ["troll", "panda"]));
    ...ce qui permet de fournir en premier param un tableau contenant les noms de balises dont on doit filtrer le contenu, et en second param les balises proscrites.

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

Discussions similaires

  1. [RegEx] Détection et remplacement automatique de sous-chaînes
    Par Rolf-IV dans le forum Langage
    Réponses: 2
    Dernier message: 10/09/2009, 17h01
  2. Réponses: 10
    Dernier message: 14/07/2008, 20h40
  3. Remplacer sous-chaîne à partir d'une table
    Par stefposs dans le forum Access
    Réponses: 4
    Dernier message: 11/04/2008, 11h24
  4. Remplacement de sous-chaînes
    Par psych0o0 dans le forum C
    Réponses: 2
    Dernier message: 15/08/2007, 21h42
  5. Remplacer une sous chaîne par une autre
    Par Erakis dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 10/11/2006, 09h16

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