Partage
  • Partager sur Facebook
  • Partager sur Twitter

Utilisation spéciale de replace dans un parser

Sujet résolu
    12 janvier 2011 à 16:53:27

    Bonjour bonjour,

    Je m'en remets à vous car je n'ai pas vraiment d'idée sur comment faire ceci : supprimer le contenu d'un texte à l'aide d'un parseur pour ne garder que certaines balises.

    Donc serait-il possible de conserver seulement les balises (et ce qu'il y a entre) et de supprimer tout le reste dans cette phrase par exemple : "Je souhaite <a>vraiment</a> supprimer ces <b>balises</b>, comment faire ?

    J'ai essayé avec un replace mais pas moyen de trouver une façon clean de le faire :(


    Des idées là-dessus ?
    • Partager sur Facebook
    • Partager sur Twitter
      12 janvier 2011 à 20:29:21

      Comme ça ?

      var str = "Je souhaite <a>vraiment</a> supprimer ces <b>balises</b>",
      reg = /[\s\S]*?(<(.+?)>[\s\S]*?<\/\2>)[\s\S]*?/g;
      alert(str.replace(reg,'$1')); // <a>vraiment</a><b>balises</b>
      
      • Partager sur Facebook
      • Partager sur Twitter
        12 janvier 2011 à 21:43:55

        Faut que j'essaie ce que tu me propose Golmote, mais à vrai dire je venais poser ma question après avoir fait quelques tests de cette manière :

        field = field.replace(/\([\s\S]*?)<titre\>([\s\S]*?)\<\/titre\>([\s\S]*?)/g, '<h1 class=titre_article>$1</h1>');
        


        et ça déconne totalement (bizarre d'ailleurs, voir même illogique)...
        • Partager sur Facebook
        • Partager sur Twitter
          12 janvier 2011 à 21:52:51

          Tu peux montrer un exemple clair et précis de ce que tu cherches à obtenir : texte en entrée et texte en sortie ?

          Parce que là, je suis pas sûr de bien comprendre...
          • Partager sur Facebook
          • Partager sur Twitter
            12 janvier 2011 à 22:50:23

            Bah c'est bien ce que tu as fait dans ton exemple, le but est donc atteint :)

            Mais la subtilité est la suivante : si cela se passait mal avec l'emploi de replace que je faisait dans mes tests, c'est parce que je cherche à ne garder que certaines balises (donc un panel de balises), et pour ça je vais devoir encore faire quelques essai.

            Donc en gros j'ai des string comprenant plusieurs types de balises, des balises <a>, <b>, <c> et <d>, mais je ne souhaite garder que les balises <a> et <d>.
            • Partager sur Facebook
            • Partager sur Twitter
              12 janvier 2011 à 23:09:30

              Je crains que pour ton cas, tu ne puisses pas facilement utiliser replace. D'autres méthodes, comme exec() sont plus appropriées pour des parsages un peu complexes.
              • Partager sur Facebook
              • Partager sur Twitter
                12 janvier 2011 à 23:16:53

                Mmh, au moins c'est une piste, mais connaissant exec elle me semble sinueuse ^^
                • Partager sur Facebook
                • Partager sur Twitter
                  12 janvier 2011 à 23:19:45

                  Bah le problème avec replace() et le code que j'ai donné précédemment, c'est que ça ne supprime pas les caractères en fin de chaîne... et je ne parviens pas à modifier la regexp de sorte à ce que.

                  Donc à mon avis, avec exec(), tu te prendras beaucoup la tête, tu disposeras d'une méthode bien plus puissante et tu pourras coder un truc solide. :)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 janvier 2011 à 23:34:30

                    Citation : Golmote

                    Bah le problème avec replace() et le code que j'ai donné précédemment, c'est que ça ne supprime pas les caractères en fin de chaîne...


                    Aha, on est occupés à la même chose, quoique j'ai arrêter pour chercher autre chose car je ,comptais parser le résultat obtenu, mais je sens que ça va pas aller d'avantage.

                    Le souci est que les différents types de balises peuvent survenir dans n'importe quel ordre, et je vois pas (encore) comment employer exec à ces fins.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      13 janvier 2011 à 8:03:07

                      var str = "c'est <a>parce</a> que je <b>cherche</b> à ne <c>garder</c> que <d>certaines</d> balises",
                      balisesAGarder = ['a','d'],
                      reg = new RegExp('[\\s\\S]*?(<('+balisesAGarder.join('|')+')>[\\s\\S]*?<\\/\\2>)[\\s\\S]*?','g'),
                      res = null,
                      newStr = "";
                      while(res = reg.exec(str)) {
                        newStr += res[1];
                      }
                      
                      alert(newStr); // <a>parce</a><d>certaines</d>
                      
                      • Partager sur Facebook
                      • Partager sur Twitter
                        13 janvier 2011 à 14:51:40

                        Tu touche pile poil dans le mile golmote ! :)

                        Ta fonction est exactement celle que j'avais imaginé (bon je me disais en fait qu'on devait pouvoir le faire avec replace et que le truc allait tourner autour de l'array que tu as nommé "balisesAGarder"), mais je n'aurais pas pu l'écrire moi-même, je suis pas assez pro pour ça ^^

                        J'ai mis un exemple en ligne rien que pour te montrer l'application de ta fonction Golmote : questmachine.org/Articles/Creer_un_article_pour_Golmote

                        Regarde dans la section rédaction, un sommaire est désormais généré automatiquement.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          13 janvier 2011 à 19:30:42

                          D'accord, je comprends mieux l'intérêt de cette fonction ^^

                          Avec le replace, j'avais fait pareil (avec le tableau de balises à garder), mais le problème des caractères de fin de chaîne subsistait. ^^


                          Pense à mettre ton sujet en résolu à l'aide du bouton approprié ;)
                          • Partager sur Facebook
                          • Partager sur Twitter

                          Utilisation spéciale de replace dans un parser

                          × 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