Ensembles et intervalles dans les regex JavaScript
Les ensembles et intervalles dans les regex JavaScript permettent de faire correspondre des groupes de caractères efficacement pour valider et traiter du texte.
Les expressions régulières (regex) en JavaScript sont un outil puissant pour le traitement et la manipulation de texte. Un ensemble de caractères (ou classe de caractères) vous permet de dire "faire correspondre l'un de ces caractères" à une position donnée dans la chaîne — un élément de base que l'on utilise constamment pour valider des entrées, analyser du texte ou nettoyer des données.
Ce guide couvre les ensembles [...], les intervalles comme [a-z0-9], la négation [^...], la manière d'échapper les caractères spéciaux à l'intérieur d'un ensemble, et la façon dont les ensembles se combinent avec les classes abrégées telles que \w et \d. Chaque exemple est exécutable, vous pouvez donc vérifier le résultat vous-même.
Introduction aux ensembles dans les regex
Un ensemble dans une expression régulière spécifie un groupe de caractères dont l'un quelconque peut correspondre à une position donnée dans la chaîne de recherche. Les ensembles s'écrivent entre crochets []. Il est essentiel de noter qu'un ensemble correspond à exactement un caractère — [abc] correspond à un seul a, b ou c, et non à la chaîne "abc".
Ensembles de base
Par exemple, l'ensemble [abc] correspondra à n'importe quel caractère unique qui est a, b ou c. Avec l'option globale g, match() retourne chaque caractère trouvé :
Ensembles niés
Pour créer un ensemble nié qui correspond à n'importe quel caractère non listé, placez un caret ^ immédiatement après le crochet ouvrant. Par exemple, [^abc] correspond à n'importe quel caractère unique sauf a, b ou c. Le ^ n'a cette signification spéciale qu'en première position ; ailleurs, il représente un caret littéral.
Comprendre les intervalles
À l'intérieur d'un ensemble, vous pouvez écrire un intervalle avec un tiret — début-fin — au lieu de lister chaque caractère. Un intervalle correspond à n'importe quel caractère dont le point de code se situe entre les deux bornes, incluses. Cela garde les motifs courts et lisibles.
Intervalles numériques
Par exemple, [0-9] représente n'importe quel chiffre de 0 à 9. L'ajout de + permet de faire correspondre un ou plusieurs chiffres consécutifs, de sorte que des chiffres adjacents sont regroupés en une seule correspondance :
Intervalles alphabétiques
De même, [a-z] correspond à n'importe quelle lettre minuscule et [A-Z] à n'importe quelle lettre majuscule. Vous pouvez placer plusieurs intervalles dans un même ensemble — [A-Za-z0-9] couvre les lettres et les chiffres — pour faire correspondre plusieurs types de caractères à la fois :
Un cas d'utilisation courant est une vérification d'identifiant de base, où le premier caractère doit être une lettre et le reste peut être des lettres, des chiffres ou des tirets bas :
Utilisation avancée des ensembles et intervalles
Vous pouvez insérer des classes abrégées directement dans un ensemble, aux côtés de caractères littéraux et d'intervalles. Les abréviations se comportent de la même manière à l'intérieur de [...] qu'à l'extérieur :
\d— un chiffre, équivalent à[0-9]\w— un caractère "mot" :[A-Za-z0-9_]\s— un espace blanc (espace, tabulation, saut de ligne, …)
Ainsi, [\d.] signifie "un chiffre ou un point", et [\w-] signifie "un caractère mot ou un tiret". Consultez les Classes de caractères pour la liste complète et les formes niées en majuscules (\D, \W, \S).
Exemple : combiner des caractères de mot et des symboles spéciaux
Voici un cas pratique : conserver les caractères de mot et un signe de ponctuation spécifique, tout en ignorant le reste.
Ici, \w couvre toutes les lettres, les chiffres et le tiret bas. En ajoutant ! à l'ensemble, on fait également correspondre le point d'exclamation, que \w n'inclut pas. C'est pratique lorsque vous souhaitez autoriser quelques symboles spécifiques sans ouvrir la correspondance à toute la ponctuation.
Support Unicode et multilingue
Les intervalles comme [a-z] ne couvrent que les lettres ASCII — ils ne tiennent pas compte des caractères accentués et non latins. Pour faire correspondre des lettres dans toutes les langues, utilisez les échappements de propriétés Unicode (ECMAScript 2018+) avec l'option u. Par exemple, \p{L} correspond à n'importe quel type de lettre dans n'importe quel script :
L'option u est requise pour que \p{...} fonctionne. Apprenez-en davantage dans L'option unicode "u" et la classe \p{...} et la présentation des Motifs et options.
Exclure des intervalles dans les expressions régulières
La négation fonctionne également avec les intervalles. [^0-9] correspond à n'importe quel caractère non numérique, et vous pouvez mélanger des intervalles et des caractères individuels après le caret. Une tâche fréquente consiste à supprimer ou à trouver tout ce qui ne fait pas partie d'un groupe autorisé — ici, chaque caractère qui n'est pas une voyelle (l'option i rend la recherche insensible à la casse) :
Exemple d'exclusion d'intervalles
Cette regex trouvera tous les caractères non-voyelles, y compris la ponctuation et les espaces. C'est un moyen puissant de filtrer les caractères indésirables d'une chaîne.
Échapper les caractères spéciaux dans les ensembles
À l'intérieur d'un ensemble, bien moins de caractères sont spéciaux qu'à l'extérieur. Vous n'avez à vous préoccuper que de quatre d'entre eux : le crochet fermant ], la barre oblique inverse \, le caret ^ (spécial uniquement au début) et le tiret - (spécial uniquement entre deux caractères). Échappez-les avec une barre oblique inverse pour les utiliser littéralement.
Un raccourci utile : un tiret est traité comme un littéral s'il est le premier ou le dernier caractère de l'ensemble, donc [-+] et [a-z-] n'ont pas besoin d'être échappés. De même, les caractères spéciaux hors d'un ensemble — comme ., *, +, (, ) — perdent leur signification à l'intérieur et correspondent littéralement, donc [.+] correspond simplement à un point ou un plus.
Exemple d'échappement de caractères spéciaux
Ici, les crochets sont échappés pour être lus comme des caractères littéraux plutôt que comme l'ouverture et la fermeture d'un ensemble. L'exemple suivant illustre ensemble la règle du tiret-comme-littéral et la règle de la perte de signification du point :
Conclusion
Maîtriser les ensembles et les intervalles dans les regex JavaScript améliore non seulement vos capacités de manipulation de chaînes, mais conduit également à un code plus propre et plus efficace. Ils sont particulièrement puissants pour analyser du texte, valider des entrées et traiter des données dans le développement web.