Logo JavaScript

« [^] » capture plus de chose que « . » dans une regexp JavaScript, tu sais pourquoi ?

Flattr this!

On me demandait sur Twitter il y a peu : pourquoi "[^]" capture plus de chose que "." dans une regexp ? La réponse est assez simple et ennuiera certainement les gens calés en regexp mais j'espère que ça intéressera certains d'entre vous quand même.

/[^]/.exec("\nsdfsd")

Celle-ci vous retournera ça :

["
"]

Pendant que

/./.exec("\nsdfsd")

Celle-là vous retournera ça :

["s"]

C'est normal, ça dépend uniquement de la définition même des éléments utilisés.

Le . capture "tout", c'est à dire tous les caractères visibles mais aussi les espaces blancs. Les espaces blancs n'incluent pas les retours à la ligne.

Le [^] ne matche que ce qui n'est pas interdit, et rien n'est interdit puisqu'à la suite du symbole ^, il n'y a rien dans la classe. Donc tout est autorisé. Y compris les retours à la ligne.

Flattr this!

A propos de Mathieu

Ingénieur développeur web dans la vente par correspondance B2B, adepte de nouvelles technologies et d'innovation. Vous pouvez aussi me retrouver sur Twitter @mathrobin
Cette entrée a été publiée dans JavaScript, avec comme mot(s)-clef(s) , . Vous pouvez la mettre en favoris avec ce permalien.
  • http://cahnory.tumblr.com François « cahnory » Germain

    Ok, donc l’incompréhension pour moi venait de ce que tu résumes par : ‘Le . capture « tout », c’est à dire tous les caractères visibles’. Car tout, par définition ça veut dire… tout :p. Cette nuance n’est que très rarement faites, en tout cas je ne l’avais jamais remarqué !
    Merci 😉 !

    • http://www.mathieurobin.com/ Mathieu

      Effectivement, ce n’est pas la nuance la plus mise en avant. L’erreur est humaine

Articles liés