Créer des sous masques et des assertions dans les expressions régulières JavaScript

Dans cette nouvelle leçon, nous allons étudier les métacaractères ( et ) qui vont nous permettre de créer des sous masques et allons également voir ce que sont les assertions.

 

Les sous masques

Les métacaractères ( et ) vont être utilisés pour délimiter des sous masques.

Un sous masque est une partie d’un masque de recherche. Les parenthèses vont nous permettre d’isoler des alternatives ou de définir sur quelle partie du masque un quantificateur doit s’appliquer.

De manière très schématique, et même si ce n’est pas strictement vrai, vous pouvez considérer qu’on va en faire le même usage que lors d’opérations mathématiques, c’est-à-dire qu’on va s’ne servir pour prioriser les calculs.

De plus, notez que les parenthèses vont par défaut créer des sous masques dits « capturants ». Cela signifie tout simplement que lorsqu’un sous masque est trouvé dans la chaine de caractères, la correspondance sera gardée en mémoire et pourra ainsi être réutilisée par la suite.

Pour qu’une partie de la chaîne de caractère corresponde mais que la correspondance ne soit pas gardée en mémoire, on pourra utiliser les signes ?: dans les parenthèses comme premiers caractères de celles-ci.

Code HTML support pour présentation des sous masques et des assertions des expressions régulières JavaScript

Utilisation des parenthèses dans les expressions régulières JavaScript pour créer des sous masques capturants

Les sous masques délimités par les parenthèses dans nos expressions régulières JavaScript sont capturants

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

Ici, je vous rappelle avant tout que lorsque l’option g est utilisée, la méthode match() renvoie toutes les correspondances mais ne renvoie pas le contenu capturé avec les parenthèses capturantes. En revanche, si on n’utilise pas g, seule la première correspondance est ses groupes capturants liés seront renvoyés.

Notre premier masque n’utilise pas les métacaractères de sous masque ( ). Il nous permet de chercher « er » ou « t ».

Notre deuxième masque contient un sous masque. Ce masque va nous permettre de chercher « er » ou « et », et de capturer les sous masques liés à la première correspondance trouvée avec match().

Le troisième masque va nous permettre de rechercher « Bonjour » dans notre chaine et va capturer « jour ». Notre quatrième masque est identique au troisième mais utilise en plus l’option g ce qui fait que les séquences capturées ne seront pas renvoyées par match().

 

Les assertions

On appelle « assertion » un test qui va se dérouler sur le ou les caractères suivants ou précédent celui qui est à l’étude actuellement. Par exemple, le métacaractère $ est une assertion puisque l’idée ici est de vérifier qu’il n’y a plus aucun caractère après le caractère ou la séquence écrite avant $.

Ce premier exemple correspond à une assertion dite simple. Il est également possible d’utiliser des assertions complexes qui vont prendre la forme de sous masques.

Il existe à nouveau deux grands types d’assertions complexes : celles qui vont porter sur les caractères suivants celui à l’étude qu’on appellera également « assertion avant » et celles qui vont porter sur les caractères précédents celui à l’étude qu’on appellera également « assertion arrière ».

Les assertions avant et arrière vont encore pouvoir être « positives » ou « négatives ». Une assertion « positive » est une assertion qui va chercher la présence d’un caractère après ou avant le caractère à l’étude tandis qu’une assertion « négative » va au contraire vérifier qu’un caractère n’est pas présent après ou avant le caractère à l’étude.

Notez que les assertions, à la différence des sous masques, ne sont pas capturantes par défaut et ne peuvent pas être répétées.

Voici les assertions complexes qu’on va pouvoir utiliser ainsi que leur description rapide :

AssertionDescription
a(?=b)Cherche « a » suivi de « b » (assertion avant positive)
a(?!b)Cherche « a » non suivi de « b » (assertion avant négative)
(?<=b)aCherche « a » précédé par « b » (assertion arrière positive)
(?<!b)aCherche « a » non précédé par « b » (assertion arrière négative)

Création d'assertions dans nos expressions régulières JavaScript

Utilisation d'assertions au sein de nos expressions régulières JavaScript

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

Laisser un commentaire