Partage
  • Partager sur Facebook
  • Partager sur Twitter

Résultat bizarre avec une regex...

Sujet résolu
    28 juillet 2009 à 10:45:51

    Bonjour, j'ai un petit problème avec une de mes regex et je dois dire que je ne comprend pas d'où ça vient !
    Ce que je veux faire est remplacer les espace contenus dans des parenthèses par un signe que j'ai choisi qui est '§%§' (mais ça peux être n'importe quoi). Pour ça j'ai fait ceci :
    var result = str.match(/\(.+\)/g), regex;
    if(result) {
    	for(var i = 0; i < result.length; i++) {
    		regex = new RegExp(result[i]);
    		str = str.replace(regex, result[i].replace(/\s/g, '§%§'));
    	}
    }
    

    Quand str vaut :
    div:(first ())

    Ça me renvoi :
    div:((first§%§())())

    Donc ça marche, ça remplace bien les espaces contenus dans des parenthèses par mon signe sauf que je ne sais pas pourquoi, il double certaine parenthèse o_O:waw:
    Ps : si vous avez une solution autre que la mienne pour faire ce que je souhaite ça m'est égal

    Merci d'avance :ange:
    • Partager sur Facebook
    • Partager sur Twitter
      28 juillet 2009 à 11:12:58

      Essaie comme ça :

      var result = /\(.+\)/.exec(str);
      if(result[0]) {
        var l = RegExp.leftContext, r = RegExp.rightContext;
        str = l + result[0].replace(/\s/g,'§%§') + r;
      }
      
      • Partager sur Facebook
      • Partager sur Twitter
        28 juillet 2009 à 11:50:02

        Merci, ça marche très bien, le seul problème est que ça doit remplacer toutes les fois où il y a des parenthèse, car il peut y en avoir plusieurs.
        Or ici ça ne marche que pour le 1er :( (même si je met le paramètre 'g' à la regex)
        (on peut surement faire une boucle mais bon si on peut s'en passer ^^ )
        • Partager sur Facebook
        • Partager sur Twitter
          28 juillet 2009 à 12:07:49

          Euh :
          str = str.replace(/(\(.+)\s(.+\))/g,'$1§%§$2');
          

          Un truc dans le genre directement avec des parenthèses capturantes.
          • Partager sur Facebook
          • Partager sur Twitter
            28 juillet 2009 à 12:26:14

            Citation : louf404

            Merci, ça marche très bien, le seul problème est que ça doit remplacer toutes les fois où il y a des parenthèse, car il peut y en avoir plusieurs.



            Peux-tu montrer un exemple de chaîne plus complexe alors ? Ainsi que le résultat attendu ?
            • Partager sur Facebook
            • Partager sur Twitter
              28 juillet 2009 à 12:27:37

              @Timot : j'avais déjà essayé cette technique sauf que j'avais fait des erreurs étant donné que, même si je ne l'ai pas dit, il faut aussi remplacer les espaces dans des crochets...
              J'avais fait ceci :
              str = str.replace(/(?:(\(.+)\s(.+\)))|(?:(\[.+)\s(.+\]))/g,'$1§%§$2');
              

              Sauf que ça ne marche pas...

              Mais là tu ma donné une idée toute bête qui est de simplement le faire en 2 lignes :
              str = str.replace(/(\(.+)\s(.+\))/g,'$1§%§$2');
              str = str.replace(/(\[.+)\s(.+\])/g,'$1§%§$2');
              


              Et là ça marche :waw: Vraiment des fois... >_<
              • Partager sur Facebook
              • Partager sur Twitter
                28 juillet 2009 à 13:28:59

                Ou alors, condensé en une seule :
                str = str.replace(/((\()|\[.+)\s(.+(?(2)\)|\]))/g,'$1§%§$3');
                
                • Partager sur Facebook
                • Partager sur Twitter

                Résultat bizarre avec une regex...

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown