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 :
- <html>
- <head>
- <script type="text/javascript">
- var w=function(str) {document.write(str)};
- str = "trucbidule";
- str2 = "trucmachin";
- re=/truc(bidule)?/;
- re2=/truc(?:bidule)/;
- w("<h1>Regexp 'trucbidule'</h1>" );
- w("match(/truc(bidule)?/) : "+str.match(re)+"<br>" );
- w("match(/truc(?:bidule)/) : "+str.match(re2)+"<br>" );
- w("/truc(bidule)?/.test(str) : "+re.test(str)+"<br>" );
- w("/truc(?:bidule)/.test(str) : "+re.test(str)+"<br>" );
- w("<h1>Regexp 'trucmachin'</h1>" );
- w("match(/truc(bidule)?/) : "+str2.match(re)+"<br>" );
- w("match(/truc(?:bidule)/) : "+str2.match(re2)+"<br>" );
- w("/truc(bidule)?/.test(str) : "+re.test(str2)+"<br>" );
- w("/truc(?:bidule)/.test(str) : "+re2.test(str2)+"<br>" );
- </script>
- </head>
- <body>
- </body>
- </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