Les métacaractères point, alternatives, ancres et quantificateurs des expressions régulières JavaScript

Dans la leçon précédente, nous avons appris à créer des classes de caractères et avons également parlé de caractères qui possèdent une signification spéciale : les métacaractères.

Nous n’avons accès qu’à trois métacaractères au sein des classes de caractères : les métacaractères ^, - et \.

A l’extérieur des classes de caractères, cependant, de nombreux autres caractères possèdent une signification spéciale comme le point, la barre verticale, l’accent circonflexe (qui va avoir une autre signification qu’au sein d’une classe), le signe dollar ou encore ce qu’on appelle les quantificateurs.

Nous allons étudier ces différents métacaractères dans cette leçon.

 

Le point

Le métacaractère . (point) va nous permettre de rechercher n’importe quel caractère à l’exception du caractère représentant une nouvelle ligne.

Pour rechercher le caractère « . » dans une chaine de caractère, il faudra l’échapper ou le protéger avec un antislash dans notre masque comme pour tout métacaractère.

Code HTML support de présentation des métacaractères des expressions régulières JavaScript

Exemple d'utilisation du métacaractère point des expressions régulières en JavaScript

See the Pen
Cours JavaScript 9.4.1
by Pierre (@pierregiraud)
on CodePen.

Comme vous pouvez le voir, le point a un sens bien différent selon qu’il soit spécifié dans une classe ou en dehors d’une classe de caractères : en dehors d’une classe de caractères, le point est un métacaractère qui permet de chercher n’importe quel caractère sauf une nouvelle ligne tandis que dans une classe de caractère le point sert simplement à rechercher le caractère point dans notre chaine de caractères.

Encore une fois, il n’existe que trois métacaractères c’est-à-dire trois caractères qui vont posséder un sens spécial à l’intérieur des classes de caractères. Les métacaractères que nous étudions dans cette leçon ne vont avoir un sens spécial qu’en dehors des classes de caractères.

 

Les alternatives

Le métacaractère | (barre verticale) sert à proposer des alternatives. Concrètement, ce métacaractère va nous permettre de créer des masques qui vont pouvoir chercher une séquence de caractères ou une autre.

Présentation du métacaractère alternative des expressions régulières en JavaScript

Exemple d'utilisation du métacaractère alternative des expressions régulières en JavaScript

See the Pen
Cours JavaScript 9.4.2
by Pierre (@pierregiraud)
on CodePen.

Ici, on utilise le métacaractère | pour créer une alternative dans nos deux masques de recherche. Le premier masque va trouver le caractère « o » ou le caractère « u » tandis que le second va trouver la séquence « Pierre » ou la séquence « Mathilde ».

 

Les ancres

Les deux métacaractères ^ et $ vont nous permettre « d’ancrer » des masques.

Le métacaractère ^, lorsqu’il est utilisé en dehors d’une classe, va posséder une signification différente de lors de l’utilisation dans une classe. Attention donc à ne pas confondre les deux sens !

Utiliser le métacaractère ^ en dehors d’une classe nous permet d’exprimer le fait qu’on recherche la présence du caractère suivant le ^$ va nous permettre de rechercher la présence du caractère précédant ce métacaractère en fin de chaine.

Il va falloir placer le métacaractère $ en fin de du masque ou tout au moins en fin d’alternative pour qu’il exprime ce sens.

Notez que si on souhaite rechercher les caractères « ^ » ou « $ » au sein de notre chaine, il faudra les échapper à l’aide d’un antislash comme pour tout autre métacaractère.

Prenons immédiatement quelques exemples concrets :

Présentation des métacaractères ancres des expressions régulières en JavaScript

Exemple d'utilisation des métacaractères ancres des expressions régulières en JavaScript

See the Pen
Cours JavaScript 9.4.3
by Pierre (@pierregiraud)
on CodePen.

Notre premier masque utilise les métacaractères ^ et .. Ce masque trouve n’importe quel caractère à l’exception du caractère de nouvelle ligne en début de chaine.

Notre deuxième masque recherche une lettre majuscule de l’alphabet en début de chaine. Faites bien attention ici : le métacaractère ^ est bien en dehors de la classe de caractères.

Notre troisième masque recherche n’importe quel caractère à l’exception du caractère représentant une nouvelle ligne en fin de chaine.

Le quatrième masque recherche la séquence de caractères « a^$b ». En effet, les caractères « ^ » et « $ » sont ici utilisés au milieu de la chaine et perdent donc leur sens spécial. Cependant, il faut tout de même les protéger pour que tout fonctionne normalement.

Notre cinquième masque chercher un « e » ou un « «$ » dans la chaine. En effet,
Le caractère « $ » est ici utilisé au sein d’une classe de caractère et ne possède pas de sens spécial dans une classe. Il ne sert donc ici qu’à rechercher le caractère qu’il représente.

Notre sixième masque utilise deux fois le métacaractères ^ : une fois à l’extérieur de la classe de caractères du masque et une fois à l’intérieur. Ici, on cherche donc tout caractère qui n’est pas une lettre minuscule de l’alphabet en début de chaine.

Finalement, notre dernier masque nous permet de vérifier si notre chaine est composée exactement de trois caractères qui ne sont pas des retours à la ligne. En effet, vous devez bien comprendre ici qu’on recherche une séquence de trois caractères qui peuvent être n’importe quel caractère sauf un caractère de retour à la ligne avec le premier caractère en début de chaine et le dernier caractère en fin de chaine.

 

Les quantificateurs

Les quantificateurs sont des métacaractères qui vont représenter une certaine quantité d’un caractère ou d’une séquence de caractères.

Nous allons pouvoir utiliser les quantificateurs suivants :

QuantificateurDescription
a{X}On veut une séquence de X « a »
a{X,Y}On veut une séquence de X à Y fois « a »
a{X,}On veut une séquence d’au moins X fois « a » sans limite supérieure
a?On veut 0 ou 1 « a ». Équivalent à a{0,1}
a+On veut au moins un « a ». Équivalent à a{1,}
a*On veut 0, 1 ou plusieurs « a ». Équivalent à a{0,}

Bien évidemment, les lettres « a », « X » et « Y » ne sont données ici qu’à titre d’exemple et on les remplacera par des valeurs effectives en pratique.

Présentation des quantificateurs des expressions régulières en JavaScript

Exemple d'utilisation des quantificateurs des expressions régulières en JavaScript

See the Pen
Cours JavaScript 9.4.4
by Pierre (@pierregiraud)
on CodePen.

Notre premier masque va ici nous permettre de chercher un « e » suivi de 0 ou 1 « r ». La chose à bien comprendre ici est que si notre chaine contient un « e » suivi de plus d’un « r » alors la séquence « er » sera bien trouvée puisqu’elle est bien présente dans la chaine. Le fait qu’il y ait d’autres « r » derrière n’influe pas sur le résultat.

Notez également que les quantificateurs sont dits « gourmands » par défaut : cela signifie qu’ils vont d’abord essayer de chercher le maximum de répétition autorisé. C’est la raison pour laquelle ici « er » est renvoyé la première fois (séquence présente dans « Pierre ») et non pas simplement « e ». Ensuite, ils vont chercher le nombre de répétitions inférieur et etc. (le deuxième « e » de « Pierre » est également trouvé.

Notre deuxième masque va chercher un « e » suivi d’au moins un « r ». On trouve cette séquence dans « Pierre ». Comme les quantificateurs sont gourmands, c’est la séquence la plus grande autorisée qui va être trouvée, à savoir « err ».

Notre troisième masque est plus complexe et également très intéressant. Il nous permet de chercher une chaine qui commence par une lettre de l’alphabet commun en majuscule suivie d’au moins 10 caractères qui peuvent être n’importe quel caractère à part un retour à la ligne (puisqu’on utilise ici le métacaractère point).

Finalement, notre quatrième masque va nous permettre de vérifier qu’une chaine contient exactement et uniquement 10 chiffres. Ce type de masque va être très intéressant pour vérifier qu’un utilisateur a inscrit son numéro de téléphone correctement lors de son inscription sur notre site par exemple.

Laisser un commentaire