Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
772 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  regexp différence entre (?:mot) et (mot)?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

regexp différence entre (?:mot) et (mot)?

n°1451409
gatsu35
Blablaté par Harko
Posté le 03-10-2006 à 13:28:35  profilanswer
 

Je suis en train de faire des tests de JS sur les regexp en ce moment. Et là je bloque sur un truc, quel est la différence entre (?:mot) et (mot)?
En prenant ce code :  

Code :
  1. <html>
  2. <head>
  3. <script type="text/javascript">
  4.  var w=function(str) {document.write(str)};
  5.  str = "trucbidule";
  6.  str2 = "trucmachin";
  7.  re=/truc(bidule)?/;
  8.  re2=/truc(?:bidule)/;
  9.  w("<h1>Regexp 'trucbidule'</h1>" );
  10.  w("match(/truc(bidule)?/) : "+str.match(re)+"<br>" );
  11.  w("match(/truc(?:bidule)/) : "+str.match(re2)+"<br>" );
  12.  w("/truc(bidule)?/.test(str) : "+re.test(str)+"<br>" );
  13.  w("/truc(?:bidule)/.test(str) : "+re.test(str)+"<br>" );
  14.  w("<h1>Regexp 'trucmachin'</h1>" );
  15.  w("match(/truc(bidule)?/) : "+str2.match(re)+"<br>" );
  16.  w("match(/truc(?:bidule)/) : "+str2.match(re2)+"<br>" );
  17.  w("/truc(bidule)?/.test(str) : "+re.test(str2)+"<br>" );
  18.  w("/truc(?:bidule)/.test(str) : "+re2.test(str2)+"<br>" );
  19. </script>
  20. </head>
  21. <body>
  22. </body>
  23. </html>


 
J'obtiens ceci comme résultat

Citation :


Regexp 'trucbidule'
match(/truc(bidule)?/) : trucbidule,bidule
match(/truc(?:bidule)/) : trucbidule
/truc(bidule)?/.test(str) : true
/truc(?:bidule)/.test(str) : true
Regexp 'trucmachin'
match(/truc(bidule)?/) : truc,
match(/truc(?:bidule)/) : null
/truc(bidule)?/.test(str) : true
/truc(?:bidule)/.test(str) : false


 
Mais là je ne vois toujours pas la différence entre (?:mot) et (mot)?
 
Je sais que dans la regexp suivant (que j'ai faite moi même)
truc(bidule)?
on matchera les mots :  
truc, trucbidule, trucnimportequoi
 
D'après la spec (?:mot) c'est pour spécifier une écriture littérale pour respecter un mode objet mais bon en anglais c'est un peu lourd à lire :/
http://www.ecma-international.org/ [...] ma-262.pdf (page 34)
 
Si quelqu'un pouvais m'éclairer sur l'utilité d'une telle écriture et/ou me tourner vers des tutos anglais/francais pour bien comprendre l'animal.
Merci par avance


Message édité par gatsu35 le 03-10-2006 à 13:30:59
mood
Publicité
Posté le 03-10-2006 à 13:28:35  profilanswer
 

n°1451411
anapajari
s/travail/glanding on hfr/gs;
Posté le 03-10-2006 à 13:33:15  profilanswer
 

j'aime bien la doc perl sur les regex: http://www.perl.com/doc/manual/html/pod/perlre.html
Tu y trouveras l'explication suivante:

Citation :

(?:pattern)
(?imsx-imsx:pattern)

 
    This is for clustering, not capturing; it groups subexpressions like ``()'', but doesn't make backreferences as ``()'' does.
...


 
edit: remarque en js c'est du posix les regex ... enfin je crois :o


Message édité par anapajari le 03-10-2006 à 13:37:12
n°1451415
gatsu35
Blablaté par Harko
Posté le 03-10-2006 à 13:39:29  profilanswer
 

Heu là tu m'embrouilles encore plus [:petrus75]


Message édité par gatsu35 le 03-10-2006 à 13:39:36
n°1451425
anapajari
s/travail/glanding on hfr/gs;
Posté le 03-10-2006 à 13:48:24  profilanswer
 

ok petit exemple simple
sur la chaine suivante "pouet pouet la pirouette" on applique les deux regex:

/(p(ouet))/g


et

/(p(?:ouet))/g


 
Avec la première tu as "pouet" dans $1 et "ouet" dans $2 ( deux fois à cause du g)
Avec la deuxieme tu as juste "pouet", le motif décrit dans la parenthèse contenant ?: n'est pas référencé, néanmoins ça te permet de les grouper.
 
Est-ce plus clair?


Message édité par anapajari le 03-10-2006 à 13:49:01
n°1451438
gatsu35
Blablaté par Harko
Posté le 03-10-2006 à 14:00:03  profilanswer
 

\[:dawa]/ Je t'aime  
Jvais faire des tests cet aprem ou ce soir et jte redis ça :o

n°1451456
gatsu35
Blablaté par Harko
Posté le 03-10-2006 à 14:27:12  profilanswer
 

sinon j'ai trouvé un tester de regexp sympatique
 
http://www.codeproject.com/useritems/RegEx_Tracer.asp
et gratuit/open source  
il doit être en .NET :D
 
il permet de tester une regexp rapidement, mais si on veut coloriser les groupes de mots dans la regexp c'est tout con, il suffit de faire des groupements avec les braces ()


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  regexp différence entre (?:mot) et (mot)?

 

Sujets relatifs
[PERL] regexp avec caractres spéciauxDifférence de teintes dans les images sous Firefox et IExplorer.
difference d'interpretationentre ff et iedifférence gawk mawk??
différence entre 2 chaines de caractèresREGEXP : distinguer .1 de .10
Difference affichage IE/firefox[regexp] Extraire deux chaines : "blabla"[espaces,tab]"blublu"
[pascal] difference entre une procedure et une fonction ??Difference entre le html et le xhtml...
Plus de sujets relatifs à : regexp différence entre (?:mot) et (mot)?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR