Partage
  • Partager sur Facebook
  • Partager sur Twitter

utiliser une fonction dans replace

Suite du post précédent, que j'ai trop vite mis résolu...

Sujet résolu
    29 décembre 2009 à 17:21:47

    Rebonjour amis Zéros

    Suite à un post précédent, j'ai un nouveau problème :

    function  chess(str, p1, offset, s)
    {
    	return str;
    }
    
    var test = "[chessboard]Tb22;[/chessboard]".replace(/\[chessboard\](([TFCDRP][nb][0-9]{2};)*)\[\/chessboard\]/g, chess);
    		
    		alert(test);
    


    Ce code ne devrait-il pas afficher "Tb22;" ?

    Je me suis inspiré de l'exemple donné à cette page :
    https://developer.mozilla.org/En/Core_ [...] tring/Replace
    • Partager sur Facebook
    • Partager sur Twitter
      29 décembre 2009 à 17:29:36

      Bah si tu retournes str, tu retournes l'expression matchée par la regexp entière ! Donc c'est normal que ça affiche toute ta chaîne.

      Il faut que tu retournes p1 pour récupérer "Tb22;"


      Néanmoins, je suis en train de me dire que ton "*" dans la RegExp va t'empêcher d'utiliser correctement la fonction... Parce que tu ne pourras pas récupérer séparément un nombre indéfini de chaînes comme "Tb22;".
      (Je sais pas si tu m'as suivi, là...)

      Bref, moi je repropose le Tokenizer du topic précédent, ou l'utilisateur de RegExp.exec() pour parcourir toute la chaîne progressivement.


      (A noter par ailleurs que normalement, tu peux indiquer qu'un sujet résolu ne l'est plus ;) )
      • Partager sur Facebook
      • Partager sur Twitter
        29 décembre 2009 à 17:34:32

        :boulet:

        Merci !

        Mon * est dans la parenthèse capturante, sa marche !
        Donc je ne récupère qu'une seule chaine que je split dans ma fonction.

        Merci beaucoup.
        • Partager sur Facebook
        • Partager sur Twitter
          29 décembre 2009 à 17:40:35

          Ok, si tu splites ça marche en effet.

          Par contre, du coup, tu devrais mettre des parenthèses non capturantes pour supprimer ton paramètre inutile.

          /\[chessboard\]((?:[TFCDRP][nb][0-9]{2};)*)\[\/chessboard\]/g

          Et la signature de ta fonction :

          function chess(str, a_spliter, s)
          • Partager sur Facebook
          • Partager sur Twitter

          utiliser une fonction dans replace

          × 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