W3docs

Classes de caractères dans les regex JavaScript

Apprenez les classes de caractères dans les regex JavaScript : \d \w \s, leurs négations \D \W \S, le point, le drapeau s (dotAll), et les classes personnalisées [...].

Les classes de caractères en JavaScript

Une classe de caractères est un élément d'une expression régulière qui correspond à un caractère unique appartenant à un ensemble particulier — par exemple « tout chiffre » ou « tout caractère d'espacement ». Au lieu d'énumérer chaque caractère possible, vous décrivez le type de caractère souhaité, et le moteur d'expression régulière se charge de la correspondance.

Cette page couvre les classes abrégées intégrées (\d, \w, \s), leurs négations (\D, \W, \S), le point spécial . et le drapeau s (dotAll), ainsi que la façon de créer vos propres classes avec des crochets [...], y compris les plages et l'échappement.

Chaque classe correspond exactement à un caractère. Pour en correspondre plusieurs, vous combinez une classe avec un quantificateur tel que + ou {2,4}.

Les classes abrégées : \d \w \s

JavaScript fournit trois classes abrégées pour les groupes de caractères les plus courants.

ClasseCorrespond àÉquivalent
\dun chiffre[0-9]
\wun caractère de mot : une lettre, un chiffre ou un underscore[A-Za-z0-9_]
\sun caractère d'espacement : espace, tabulation \t, saut de ligne \n, etc.
javascript— editable

Une seule classe abrégée correspond à un caractère. Ajoutez un quantificateur pour correspondre à une suite de caractères — \d+ signifie « un ou plusieurs chiffres » :

javascript— editable

Les classes négatives : \D \W \S

Chaque classe abrégée possède un homologue en majuscule qui correspond à l'ensemble opposé — tout caractère qui n'appartient pas à la classe d'origine.

ClasseCorrespond à
\Dtout caractère qui n'est pas un chiffre
\Wtout caractère qui n'est pas un caractère de mot
\Stout caractère qui n'est pas un espacement
javascript— editable

Une astuce pratique : \D (ou [^\d]) permet de supprimer tout sauf les chiffres, ce qui est courant pour nettoyer les saisies utilisateur comme les numéros de téléphone.

javascript— editable

Le point . et le drapeau s (dotAll)

Le point . est une classe de caractères spéciale qui correspond à tout caractère unique sauf un saut de ligne (\n, \r, et quelques séparateurs de lignes Unicode).

javascript— editable

Lorsque vous souhaitez que le point corresponde également aux sauts de ligne, ajoutez le drapeau s (abréviation de « dotAll ») :

javascript— editable

Consultez patterns and flags pour la liste complète des drapeaux d'expressions régulières tels que g, i et s.

Classes de caractères personnalisées : [...]

Lorsque les classes abrégées ne conviennent pas, créez votre propre classe en listant des caractères entre crochets. [abc] correspond à un seul a, b, ou c.

javascript— editable

Plages

Un tiret - entre deux caractères crée une plage : [a-z] correspond à toute lettre minuscule, [0-9] à tout chiffre. Vous pouvez combiner plusieurs plages et des caractères littéraux dans une même classe. (Pour approfondir, consultez sets and ranges.)

javascript— editable

Classes personnalisées négatives [^...]

Un caret ^ en tant que premier caractère à l'intérieur des crochets inverse la classe : [^a-z] correspond à tout caractère qui n'est pas une lettre minuscule.

javascript— editable

Mélanger classes abrégées et caractères

Les classes abrégées fonctionnent également à l'intérieur des classes personnalisées. [\w.] correspond à un caractère de mot ou à un point littéral — utile pour des jetons comme des chaînes de version ou des noms de fichiers.

javascript— editable

Échappement à l'intérieur des classes de caractères

À l'intérieur de [...], la plupart des métacaractères des expressions régulières perdent leur signification spéciale, donc il n'est généralement pas nécessaire de les échapper. Par exemple, [.] correspond à un point littéral — inutile d'écrire [\.].

Quelques caractères nécessitent toutefois une attention particulière :

  • Tiret - — signifie une plage entre deux caractères. Pour correspondre à un tiret littéral, placez-le en premier, en dernier ou échappez-le : [-+], [+-], ou [+\-].
  • Caret ^ — inverse la classe uniquement lorsqu'il est en première position. Ailleurs ([a^]), il représente un ^ littéral.
  • Crochet fermant ] et barre oblique inverse \ — toujours les échapper : [\]], [\\].
javascript— editable
Avertissement

Un tiret mal placé peut créer silencieusement une plage non intentionnelle. [a-z] est une plage, mais [z-a] provoque une erreur de syntaxe, et [%-/] correspond à tout caractère dont le point de code se situe entre % et /. En cas de doute, échappez le tiret ou déplacez-le à l'extrémité de la classe.

Unicode et le drapeau u

Par défaut, \w, \d et \s ne reconnaissent que l'ASCII. Avec le drapeau u, vous activez la correspondance Unicode et les échappements de propriétés comme \p{Letter}, qui correspondent aux caractères de n'importe quelle langue. Consultez the unicode flag u and class \p pour les détails.

Conclusion

Les classes de caractères permettent de décrire quel type de caractère faire correspondre plutôt que de lister toutes les options :

  • \d \w \s correspondent aux chiffres, aux caractères de mot et aux espacements ; \D \W \S correspondent à leurs opposés.
  • Le point . correspond à tout caractère sauf un saut de ligne — sauf si vous ajoutez le drapeau s (dotAll).
  • Les crochets [...] créent des ensembles personnalisés ; ajoutez des plages avec -, inversez avec un ^ initial, et gardez à l'esprit que la plupart des métacaractères sont littéraux à l'intérieur d'une classe.

Combinez ces classes avec des quantificateurs pour correspondre à des caractères répétés et créer des patterns puissants et lisibles.

Pratique

Pratique
Lesquelles des options suivantes sont des classes de caractères valides en JavaScript ?
Lesquelles des options suivantes sont des classes de caractères valides en JavaScript ?
Was this page helpful?