En informatique, une expression régulière ou expression rationnelle ou expression normale ou motif, est une chaîne de caractères, qui décrit, selon une syntaxe précise, un ensemble de chaînes de caractères possibles. Les expressions régulières sont également appelées regex (de l'anglais regular expression). Elles sont issues des théories mathématiques des langages formels. Les expressions régulières sont aujourd’hui utilisées pour la lecture, le contrôle, la modification, et l'analyse de textes ainsi que la manipulation des langues formelles que sont les langages informatiques.
L'exemple d'expression régulière suivant permet de valider qu'une chaîne de caractère correspond à la syntaxe d'un nombre entier non signé, c'est à dire une suite non vide de chiffres :
[0-9]+
En détails :
- Les crochets spécifient l'ensemble des caractères auquel doit appartenir le caractère courant de la chaîne. Dans cet exemple, l'ensemble est celui des chiffres de 0 à 9 inclus.
- Le caractère plus indique de répéter le motif précédent au moins une fois (suite non vide).
En Javascript, la validation d'une chaîne de caractères peut se faire en utilisant la méthode match
de la chaîne de caractère à tester :
let chaine = '12345'; // ou '12ABC'
if (chaine.match("^[0-9]+$")) // OU : if (/^[0-9]+$/.test(a))
{
console.log('Le texte est un entier positif');
}
else
{
console.log('Le texte n\'est pas un entier positif');
}
À partir de la version 6 d'ECMA-script, les regex unicode seront supportées.
Syntaxe
Les expressions rationnelles peuvent être analysées et testées via un débogueur en ligne comme https://regex101.com/.
Caractère | Type | Explication |
---|---|---|
. | Point | n'importe quel caractère |
[...] | crochets | classe de caractères : tous les caractères énumérés dans la classe, avec possibilité de plages dont les bornes sont séparées par "-". Ex : [0-9a-z] pour tout l'alphanumérique en minuscule, ou [0-Z] pour tous les caractères de la table Unicode entre "0" et "Z", c'est-à-dire l'alphanumérique majuscule plus ":;<=>?@"[1]. |
[^...] | crochets et circonflexe | classe complémentée : tous les caractères sauf ceux énumérés. |
^ | circonflexe | marque le début de la chaine, la ligne... |
$ | dollar | marque la fin d'une chaine, ligne... |
| | barre verticale | alternative - ou reconnaît l'un ou l'autre |
(...) | parenthèses | groupe de capture : utilisée pour limiter la portée d'un masque ou de l'alternative |
* | astérisque | 0, 1 ou plusieurs occurrences |
+ | le plus | 1 ou plusieurs occurrences |
? | interrogation | 0 ou 1 occurrence |
{...} | accolades | comptage : détermine un nombre de caractères remplissant les critères qu'il suit. Ex : a{2} deux occurrences de "a", a{1,10} (sans espace) entre une et dix. |
(?P<nom>pattern) | named subpattern | nomme le résultat d'un groupe de capture par un nom. |
Remarques :
- Les caractères de débuts et fin de chaines (
^
et$
) ne fonctionnent pas dans[]
où ils ont un autre rôle. - Les opérateurs
*
et+
sont toujours avides, pour qu'ils laissent la priorité il faut leur apposer un?
à leur suite[2].
Classe | Signification |
---|---|
[[:alpha:]] | n'importe quelle lettre |
[[:digit:]] | n'importe quel chiffre |
[[:xdigit:]] | caractères hexadécimaux |
[[:alnum:]] | n'importe quelle lettre ou chiffre |
[[:space:]] | n'importe quel espace blanc |
[[:punct:]] | n'importe quel signe de ponctuation |
[[:lower:]] | n'importe quelle lettre en minuscule |
[[:upper:]] | n'importe quelle lettre capitale |
[[:blank:]] | espace ou tabulation |
[[:graph:]] | caractères affichables et imprimables |
[[:cntrl:]] | caractères d'échappement |
[[:print:]] | caractères imprimables exceptés ceux de contrôle |
Expression | Signification |
---|---|
\A | Début de chaine |
\b | Caractère de début ou fin de mot |
\d | Chiffre |
\D | Non chiffre |
\n | Fin de ligne |
\\pL, \p{L}, \p{Letter} | Lettre (dans tout langage) |
\s | Caractères espace |
\S | Non caractères espace |
\t | Tabulation |
\w | Caractère alphanumérique : lettre, chiffre ou underscore |
\W | Caractère qui n'est pas lettre, chiffre ou underscore |
\X | Caractère Unicode |
\z | Fin de chaine |
Constructeurs spéciaux : Ces fonctions précèdent l'expression à laquelle elles s'appliquent, et le tout doit être placé entre parenthèses.
?:
: groupe non capturant. Ignorer le groupe de capture lors de la numérotation des backreferences. Exemple :((?:sous-chaine_non_renvoyée|autre).*)
.?>
: groupe non capturant indépendant.?<=
: positive lookbehind.?<!
: negative lookbehind.?=
: positive lookahead.?!
: negative lookahead. Exclusion d'une chaine. Il faut toujours la faire suivre d'un point. Exemples :
Méthodes
Avec un objet de type expression régulière créé soit explicitement par appel au constructeur RegExp soit par la syntaxe /.../ :
- regexp.test(str)
- Tester si la chaîne de caractère en argument correspond à l'expression régulière. Retourne un booléen (
true
oufalse
).
- regexp.exec(str)
- Appliquer une expression régulière et retourner tous les groupes capturés avec des parenthèses.
Avec la chaîne de caractère à tester, le premier argument étant soit un objet de type expression régulière, soit une chaîne de caractère :
- string.match(regexp)
- Appliquer une expression régulière et retourner tous les groupes capturés avec des parenthèses.
- string.replace(regexp, replacement)
- Appliquer une expression régulière pour remplacer les parties qui correspondent par un autre texte qui peut inclure des références aux parties trouvées.
Recherche
La fonction RegExp contient deux paramètres : la chaine à traiter et facultativement, le type de traitement : "g" (global), "i" (ignorer la casse) ou "gi".
var chaine="Test regex Javascript pour Wikibooks francophone.";
var expression=new RegExp("Wikibooks","g");
if (chaine.match(expression))
document.write("Le texte parle de Wikibooks");
else
document.write("Le texte ne parle pas de Wikibooks");
Remplacement
// Remplace tous les espaces par des underscores
var chaine="Test regex Javascript pour Wikibooks francophone.";
var expression=new RegExp("( )", "g");
document.write("Chaîne d'origine : " + chaine + "<BR>");
document.write("Chaîne traitée : " + chaine.replace(expression,"_") + "<BR>");
Références
- ↑ https://unicode-table.com/fr/
- ↑ https://docstore.mik.ua/orelly/webprog/pcook/ch13_05.htm
- ↑ https://www.regular-expressions.info/posixbrackets.html
- ↑ http://www.regular-expressions.info/unicode.html
- ↑ https://www.regextester.com/15
- ↑ Jan Goyvaerts, Steven Levithan, Regular Expressions Cookbook, O'Reilly Media, Inc., (lire en ligne)