Partage
  • Partager sur Facebook
  • Partager sur Twitter

Question sur ce regex :

("^(ABS|R|J|D|[0-9]|(1[0-9])|20)$")

Sujet résolu
    28 avril 2009 à 10:05:08

    Bonjour tout le monde,

    J'ai lu attentivement le tuto regex de M@teo mais j'ai quand même encore des questions sur un regex javascript que j'utilise :

    var reg = new RegExp("^(ABS|R|J|D|[0-9]|(1[0-9])|20)$");
    


    je me demandais pourquoi mettre des ( ) supplémentaires ici :

    (1[0-9])
    


    Je me demande aussi à quoi sert le $ ici (je sais que c'est recherché dans la fin de la ligne mais j'ai un ^ qui indique de rechercher en début de ligne o_O ) :

    $");
    


    Je me demandais aussi si les guillemets de début et de fin étaient bien les séparateurs ?

    Dernière chose, sauriez-vous me dire si ce que j'indique ici est correcte svp ?

    Citation : beegees


    - Le guillemet (") est le caractère séparateur, j'aurais pu utiliser @ ou # ou autre chose…
    - Le singe ^ indique (comme en PHP) que les caractères recherchés doivent être en début de chaine
    - La barre verticale (|) se comporte en tant qu'opérateur OU
    - [0-9] indique une liste de caractère autorisés, ici de 0 à 9, le signe – indique une intervalle (le fait de mettre l'accent circonflexe (^) à l'ouverture d'un crochet indique l'interdiction, je ne tiendrai donc pas compte de abc si j'ai ceci [^abc])



    Merci d'avance.

    beegees
    • Partager sur Facebook
    • Partager sur Twitter
      28 avril 2009 à 10:14:37

      ^ commence par la regex
      $ termine par la regex
      si tu as les deux, le texte doit commencer et terminer par la regex pour être accepté.
      les parenthèses servent à "capturer" du contenu.
      • Partager sur Facebook
      • Partager sur Twitter
        28 avril 2009 à 10:22:06

        Salut Bird,

        Merci pour ta réponse.

        Citation : Bird42


        si tu as les deux, le texte doit commencer et terminer par la regex pour être accepté.
        les parenthèses servent à "capturer" du contenu.



        Super intéressant comme réponse.

        Si quelqu'un d'autre pourrait compléter, ça serait superbe.

        Merci encore ;)

        beegees
        • Partager sur Facebook
        • Partager sur Twitter
          28 avril 2009 à 10:35:41

          En fait, la capture est utilisée surtout lorsque tu utilises une regex qui fait un replace ça permet de capturer les informations qui sont entre () pour pouvoir les récupérer ensuite.
          • Partager sur Facebook
          • Partager sur Twitter
            28 avril 2009 à 10:37:37

            Citation : birdy42

            En fait, la capture est utilisée surtout lorsque tu utilises une regex qui fait un replace ça permet de capturer les informations qui sont entre () pour pouvoir les récupérer ensuite.



            Merci pour ton complément d'information Bird,

            Est-ce que quelqu'un pourrait svp confirmer ou infirmer cette phrase ? :

            Citation : beegees

            - Le guillemet (") est le caractère séparateur, j'aurais pu utiliser @ ou # ou autre chose…



            Merci encore.

            beegees
            • Partager sur Facebook
            • Partager sur Twitter
              28 avril 2009 à 10:55:35

              Sur ce dernier point je crois que tu te trompes.

              Les guillemets, c'est la syntaxe correcte.

              Quand tu utilises new RegExp() , tu lui passes un ou deux arguments en chaînes de caractères.
              Premier argument, le motif. Et deuxième argument facultatif, le drapeau.


              S'ils te gênent les guillemets, tu peux utiliser l'autre syntaxe :

              var reg = /^(ABS|R|J|D|[0-9]|(1[0-9])|20)$/;
              
              • Partager sur Facebook
              • Partager sur Twitter
                28 avril 2009 à 10:57:45

                bah c'est dis dans le tuto :p donc oui
                @golmote : j'ai vu dans le tuto le "drapeau" (flag quoi :D ) mais c'était pas expliqué à quoi ça correspondait, et pour quoi c'était... tu saurais m'(nous)expliquer ?
                • Partager sur Facebook
                • Partager sur Twitter
                  28 avril 2009 à 11:06:00

                  Okey...

                  Alors imaginons la chaîne var str = "abcd abcde";

                  Si on veut remplacer "abc" par "123", on utilisera une regexp toute simple du genre...
                  var reg=/abc/;
                  /*ou*/
                  var reg=new RegExp("abc");
                  


                  Mais si on fait ensuite :

                  str = str.replace(reg,"123");
                  

                  Seule le premier "abc" sera remplacé.


                  Comment faire alors ? On utilise le flag "g" ! (g comme greedy = gourmandise)
                  Ca va forcer le remplacement de tous les "abc".

                  Donc notre nouvelle regexp sera
                  var reg=/abc/g;
                  /*ou*/
                  var reg=new RegExp("abc","g");
                  



                  Il existe aussi le flag "i", qui permet de rendre l'expression insensible à la casse.

                  Si on a donc cette chaîne var str = "AbCd ABCde abc"; , on pourra utiliser la regexp
                  var reg=/abc/gi;
                  /*ou*/
                  var reg=new RegExp("abc","gi");
                  

                  pour obtenir avec le replace() str = "123d 123de 123";


                  Capich ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 avril 2009 à 11:08:17

                    Salut Golmote,

                    Un super grand merci pour tes explications simples et claires.

                    C'est maintenant plus claire dans ma tête.

                    Encore merci à toi.

                    beegees
                    • Partager sur Facebook
                    • Partager sur Twitter
                      28 avril 2009 à 11:13:57

                      Merci beaucoup, ça correspond aux options mis après le 2ème # en PHP donc... :-° comme ça, je suis au point avec les regex :D
                      • Partager sur Facebook
                      • Partager sur Twitter
                        28 avril 2009 à 11:23:50

                        Oui mais attention aux correspondances avec PHP. En JS, il n'y a pas le... "U" (c'est ça en PHP) pour faire du "Ungreedy".

                        La seule façon je crois d'inverser la gourmandise en JS, c'est d'ajouter un point d'interrogation avec le quantificateur...
                        var reg = /<gras>(.+?)<\/gras>/g;
                        
                        • Partager sur Facebook
                        • Partager sur Twitter
                          28 avril 2009 à 11:28:55

                          le . = tous les caractères, le + au moins une fois, et le ? permet de dire que c'est pas obligé... je comprends pas trop ta regex du coup...
                          • Partager sur Facebook
                          • Partager sur Twitter
                            28 avril 2009 à 11:32:37

                            Golmote,

                            S'ils te gênent les guillemets, tu peux utiliser l'autre syntaxe :
                            


                            Tu crois que cela s'applique à javascript ????

                            Je me demande si en javascript il ne faut pas utiliser QUE les "" ?

                            beegees
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              28 avril 2009 à 11:49:24

                              C'est rigolo de voir ses enfants grandir… En grande partie ma regex ça.

                              Sinon pour les explications t'as aussi le chapitre dessus en PHP, ça revient au même à peu de choses près.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                28 avril 2009 à 11:55:20

                                @ beegees, oui je suis sûr pour l'autre syntaxe avec les /
                                C'est celle que j'utilise tout le temps (sauf quand y'a pas le choix)


                                @bidry :
                                Attends attends, je suis allé un peu vite.

                                Imagine un zCode qui permet donc d'insérer les balises < gras> , et qui les transformera ensuite en <strong>
                                Ok ?

                                La regexp qui vient à l'esprit en premier est...
                                var str = "<gras>Ceci est en gras</gras>";
                                var reg = /< gras>(.+)<\/gras>/g;
                                str = str.replace(reg,"<strong>$1</strong>");
                                


                                Jusque là on est d'accord.

                                Mais imaginons que ta chaîne soit... var str = "<gras>Ici tout</gras> n'est pas en <gras>gras</gras>";

                                Là, si tu réutilises la même regexp que précédemment, il te donnera str = "<strong>Ici tout</gras> n'est pas en <gras>gras</strong>";

                                Mais comment se fait-ce ???

                                Et bien on lui a dit à l'aide du flag "g" d'être gourmand, et la regexp, elle obéit. Il bouffe tout.
                                Nous, on aimerait bien qu'elle évite quand même de bouffer toute la phrase.

                                Pour ça, en PHP, je crois qu'il existe un flag "U".

                                En JS non. Donc on va utiliser la petite astuce qui consiste à ajouter le point d'interrogation.
                                Ca va permettre d'inverser la gourmandise.

                                var reg = /<gras>(.+?)<\/gras>/g;
                                




                                NOTE : Les espace dans les balises gras c'était pour éviter que le zCode ne les reconnaisse.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  28 avril 2009 à 12:16:58

                                  @Golmote, merci pour le complément d'informations :) (j'vais bientôt être bon pour regex ce que je veux lol)

                                  @beeges :
                                  dans le code que Golmote a donné :
                                  var reg=/abc/gi;
                                  /*ou*/
                                  var reg=new RegExp("abc","gi");
                                  

                                  il veut dire que l'une ou l'autre façon de faire sert à la même chose, donc que tu déclares ta variable reg de l'une ou l'autre des façons, ça fonctionnera !
                                  @Golmote, dernière question après j'arrête promis (pas sûr que je la tiens cette promesse :-° ) :p
                                  en fait, les / servent de délimiteurs si j'ai bien compris ? est-ce qu'on pourrait les remplacer (par # par exemple) ou c'est obligatoirement ceux-là ?
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    28 avril 2009 à 12:25:59

                                    Normalement c'est absolument ceux-là je crois.

                                    Il y a deux façons de faire des regexp en JS :

                                    1. Via le constructeur :
                                    var reg = new RegExp("masque"[,"flags"]);
                                    


                                    2. De manière littérale :
                                    var reg = /masque/[flags];
                                    


                                    (Ce qui est entre crochets est facultatif. Les flags, en fait.)
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Question sur ce 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