--- title: Expressions rationnelles slug: Web/JavaScript/Guide/Regular_Expressions tags: - Guide - Intermédiaire - JavaScript - RegExp translation_of: Web/JavaScript/Guide/Regular_Expressions original_slug: Web/JavaScript/Guide/Expressions_régulières --- {{jsSidebar("JavaScript Guide")}}{{PreviousNext("Web/JavaScript/Guide/Formatage_du_texte", "Web/JavaScript/Guide/Collections_indexées")}} Les expressions rationnelles sont des motifs utilisés pour correspondre à certaines combinaisons de caractères au sein de chaînes de caractères. En JavaScript, les expressions rationnelles sont également des objets. Ces motifs sont utilisés avec les méthodes {{jsxref("RegExp.exec", "exec")}} et {{jsxref("RegExp.test", "test")}} de {{jsxref("RegExp")}}, et avec les méthodes {{jsxref("String.match", "match")}}, {{jsxref("String.matchAll", "matchAll")}}, {{jsxref("String.replace", "replace")}}, {{jsxref("String.search", "search")}} et {{jsxref("String.split", "split")}} de {{jsxref("String")}}. Ce chapitre explique comment utiliser les expressions rationnelles en JavaScript (aussi appelées expressions régulières ou « _RegExp_ »). ## Créer une expression rationnelle Il est possible de construire une expression rationnelle de deux façons : - Utiliser un littéral d'expression régulière, qui correspond à un motif contenu entre deux barres obliques, par exemple : ```js var re = /ab+c/; ``` Lorsque les littéraux d'expression régulière sont utilisés, l'expression est compilée lors du chargement du script. Il est préférable d'utiliser cette méthode lorsque l'expression régulière reste constante, afin d'avoir de meilleurs performances. - Appeler le constructeur de l'objet {{jsxref("RegExp")}}, par exemple : ```js var re = new RegExp("ab+c"); ``` Avec cette méthode, l'expression rationnelle est compilée lors de l'exécution. On utilisera cette méthode lorsque le motif utilisé est variable ou provient d'une autre source (par exemple une interaction utilisateur). ## Écrire une expression rationnelle Le motif d'une expression rationnelle est composé de caractères simples (comme `/abc/`), ou de caractères simples et spéciaux, comme `/ab*c/` ou `/Chapitre (\d+)\.\d*/ `. Le dernier exemple utilise des parenthèses qui permettent d'avoir une « mémoire ». La correspondance avec le motif contenu entre parenthèses pourra être utilisée par la suite. Ceci est décrit avec [ce paragraphe](#parentheses). ### Utiliser des motifs simples Les motifs simples sont construits à partir de caractères pour lesquels on souhaite avoir une correspondance directe. Le motif `/des/` correspond lorsqu'on observe exactement les caractères 'des' ensemble et dans cet ordre précis. On pourrait utiliser ce motif et détecter une correspondance dans les chaînes suivantes : "J'ai vu des licornes ?" et "Sa description de licorne était superbe" car la chaîne de caractères 'des' y est présente (dans le mot description pour le second exemple). Il n'y aura pas de correspondance avec la chaîne de caractères "Toc toc" car 'des' n'est pas présente. ### Utiliser des caractères spéciaux Lorsque le motif à trouver est plus complexe qu'une simple égalité (trouver tous les B, les blancs...), le motif devra contenir des caractères spéciaux. Ainsi, le motif `/ab*c/` correspond à toutes les combinaisons de caractères qui possèdent un seul 'a' suivi de zéro ou plusieurs 'b' (l'astérisque utilisée ici signifie que l'élément qui la précède doit être présent zéro ou plusieurs fois) qui sont immédiatement suivis d'un 'c'. Par exemple, la chaîne de caractère "cbbabbbbcdebc" correspond au motif avec la chaîne de caractères 'abbbbc'. Les pages suivantes décrivent en détail les caractères spéciaux qui peuvent être utilisés afin de composer une expression rationnelle. - [Assertions](/fr/docs/Web/JavaScript/Guide/Expressions_régulières/Assertions) - : Une assertion caractérisant la façon dont la correspondance peut se produire (en recherchant un motif avant, après ou avec une expression conditionnelle). - [Limites](/fr/docs/Web/JavaScript/Guide/Expressions_régulières/Limites) - : Permet d'indiquer le début ou la fin d'une ligne ou d'un mot. - [Classes de caractère](/fr/docs/Web/JavaScript/Guide/Expressions_régulières/Classes_de_caractères) - : Les classes permettent de distinguer différents caractères selon différents groupes (par exemple les lettres et les chiffres). - [Groupes et intervalles](/fr/docs/Web/JavaScript/Guide/Expressions_régulières/Groupes_et_intervalles) - : Permet d'indiquer un groupe ou un intervalle de caractères. - [Quantificateurs](/fr/docs/Web/JavaScript/Guide/Expressions_régulières/Quantificateurs) - : Permet d'indiquer un nombre de caractères ou d'expressions qui doivent correspondre. - [Propriétés Unicode](/fr/docs/Web/JavaScript/Guide/Expressions_régulières/Unicode_Properties) - : Permet de distinguer les caractères en fonction de leurs caractéristiques Unicode (majuscule/minuscule, symbole mathématique, ponctuation). ### Échapper des caractères SI on souhaite rechercher certains caractères dans une chaîne de caractères et que ceux-ci ont une signification spéciale lorsqu'ils font partie d'une expression rationnelle (ex. "\*"), il faudra échapper ces caractères spéciaux en plaçant une barre oblique inversée (_backslash_ "\\") devant. Ainsi, si on souhaite trouver un "a" suivi d'un astérisque ("\*") suivi d'un "b", on pourra composer l'expression rationnelle : `/a\*b/` où la barre oblique inversée échappe l'astérisque afin de lui enlever sa signification particulière. De même si on écrit un littéral d'expression rationnelle et qu'on souhaite rechercher une barre oblique ("/") dans la chaîne cible, on pourra échapper ce caractère (sinon, il aura sa signification particulière aux expressions rationnelles et indiquera la fin du motif). Si on cherche la présence de "/exemple/" dans une chaîne de caractères, on pourra utiliser le littéral `/\/exemple\//`. Il en va de même avec la barre oblique inversée (dont la signification spécifique est justement l'échappement) : si on veut rechercher la chaîne "C:\\", on pourra utiliser le motif `/C:\\/` (la première barre oblique inversée sert à échapper la seconde). Lorsqu'on utilise le constructeur {{jsxref("RegExp")}} avec une chaîne de caractères en paramètre (plutôt qu'un littéral), il faudra échapper la barre oblique inversée qui a un sens particulier dans les chaînes de caractères. Ainsi, le littéral `/a\*b/` et `new RegExp("a\\*b")` créeront la même expression (qui permet de chercher la lettre "a", suivie d'un astérisque, suivi de la lettre "b"). La tableau qui suit fournit une liste complète des caractères spéciaux pouvant être utilisés dans les expressions régulières ainsi que leur signification.
Caractère | Signification |
---|---|
\ |
Correspond selon les règles suivantes : |
^ |
Correspond au début la séquence. Si le marqueur (flag) de
lignes multiples vaut true , il correspondra également
immédiatement après un caractère de saut de ligne.Ainsi, /^A/ ne correspond pas au 'A' de "un A", mais correspond au
'A' de "Arceau".Le caractère ' ^ ' possède un
sens différent lorsqu'il est utilisé dans un motif d'ensemble de
caractères. Voir les
compléments sur les ensembles de caractères pour plus de détails et d'exemples.
|
$ |
Correspond à la fin de la séquence. Si le marqueur (flag) de lignes multiples vaut true, il correspondra également immédiatement avant un caractère de saut de ligne.
Ainsi, |
* |
Correspond à l'expression précédente qui est répétée 0 ou plusieurs
fois. Équivalent à
Ainsi, |
+ |
Correspond à l'expression précédente qui est répétée une ou plusieurs
fois. C'est équivalent à
Ainsi, |
? |
Correspond à l'expression précédente qui est présente une fois ou pas du
tout. C'est équivalent à {0,1} .Ainsi, /e?le?/ correspond au 'el' dans "gel" et au 'le' dans
"angle" mais aussi au 'l' dans "Oslo".S'il est utilisé immédiatement après l'un des quantificateurs : *, +, ?, ou {}, il rend le quantificateur moins « gourmand » auquel cas le moins de caractères correspond (le comportement par défaut, « gourmand », permettant de faire correspondre le plus de caractères possible). Par exemple /\d+/ utilisée avec "123abc" fait correspondre "123".
Utiliser /\d+?/ à la même chaîne de caractères fait
correspondre "1".Ce symbole est également utilisé dans les tests de présence autour de l'expression, décrits par les lignes x(?=y) et x(?!y) de ce tableau.
|
. |
Par défaut, (Le point) correspond à n'importe quel caractère excepté un caractère de saut de ligne.
Ainsi,
Si le marqueur |
(x) |
Correspond à 'x' et garde la correspondance en mémoire. Les
parenthèses permettent de capturer l'expression dans un «
groupe ». |
(?:x) |
Correspond à 'x' mais ne garde pas la correspondance en mémoire. Les
parenthèses ne capturent pas l'expression et permettent
d'utiliser des sous-expressions d'une expression régulière pour
travailler plus finement. L'expression /(?:zoo){1,2}/ sans
parenthèses non-capturantes les caractères {1,2} ne
s'appliqueraient qu'au dernier 'o' de 'zoo'. Avec les parenthèses
capturantes, {1,2} s'applique au mot entier 'zoo'. Pour
plus d'informations, voir
Utiliser les parenthèses ci-après.
|
x(?=y) |
Correspond à 'x' seulement s'il est suivi de 'y'. On appelle cela un test de succession (lookahead).
Ainsi, |
x(?!y) |
Correspond à 'x' seulement si 'x' n'est pas suivi de 'y'.
Ainsi, |
(?<=y)x
|
Correspond à
Ainsi / |
(?<!y)x
|
Correspond à
Ainsi, |
x|y |
Correspond à 'x' ou 'y'.
Ainsi, |
{n} |
Correspond pour exactement n occurences de l'expression précédente. N
doit être un entier positif. Ainsi, /a{2}/ ne
correspond pas au 'a' de "Mozilla" mais correspond à tous les 'a' de
"Mozilaa" et aux deux premiers 'a' de "Mozillaaa".
|
{n,} |
Correspond lorsqu'il y a au moins
Par exemple |
{n,m} |
Lorsque
Ainsi, |
[xyz] |
Un ensemble de caractère. Ce type de motif correspond pour n'importe
quel caractètre présent entre les crochets, y compris les
séquences d'échappement. Les caractères spéciaux comme le point (.) et l'astérisque ne sont
pas considérés comme spéciaux au sein d'un ensemble et n'ont donc pas
besoin d'être échappés. Il est possible de donner un ensemble sur un
intervalle de caractères en utilisant un tiret (-), comme le montre
l'exemple qui suit. Le motif [a-d] , aura les
mêmes correspondances que [abcd] , correspondant au 'b' de
"bulle" et au 'c' de "ciel". Les motifis /[a-z.]+/ et
/[\w.]+/ correspondront pour la chaîne entirère :
"Adre.ss.e".
|
[^xyz] |
Exclusion d'un ensemble de caractères. Cela correspond à tout ce qui n'est pas compris entre crochets. Il est possible de fournir un intervalle de caractères en utilisant un tiret (-). Les autres règles qui s'appliquent pour l'ensemble de caractères (ci-avant) s'appliquent également ici.
Par exemple, |
[\b] |
Correspond pour un retour arrière (U+0008). (À ne pas confondre avec
\b .)
|
\b |
Correspond à la position d'uneAfter the limite de mot. Une
limite de mot correspond à la position où un caractère d'un mot n'est
pas suivi ou précédé d'un autre caractère de mot. Il faut savoir que
la limite correspondante n'est pas incluse dans le résultat. Autrement
dit, la longueur d'une telle correspondance est nulle. (À ne pas
confondre avec
Exemples : Note : Le moteur d'expressions rationnelles JavaScript définit un ensemble de caractères spécifiques qui doivent être considérés comme des caractères de mot. Tout caractère qui n'est pas dans cet ensemble est considéré comme une limite de mot. Cet ensemble de caractères est relativement limité car constitué uniquement des caractères de l'alphabet romain en minuscules et en majuscules, des chiffres décimaux et du tiret-bas (underscore). Les autres caractères, comme les caractères accentués (é ou ü par exemple), sont donc considérés comme des limites de mots. |
\B |
Correspond à une "non-limite de mot". Cela correspond pour les cas suivants :
Ainsi, |
\cX
|
Étant donné un caractère X compris entre A et Z, cela correspond au caractère de contrôle dans une chaîne de caractères.
Ainsi, |
\d |
Correspond à un chiffre et est équivalent à
Ainsi, |
\D |
Correspond à tout caractère qui n'est pas un chiffre et est équivalent
à
Ainsi, |
\f |
Correspond à un saut de page (U+000C). |
\n |
Correspond à un saut de ligne (U+000A). |
\r |
Correspond à un retour chariot (U+000D). |
\s |
Correspond à un blanc (cela comprend les espace, tabulation, saut de
ligne ou saut de page). C'est équivalent à
Ainsi, |
\S |
Correspond à un caractère qui n'est pas un blanc. C'est équivalent à
Ainsi, |
\t |
Correspond à une tabulation (U+0009). |
\v |
Correspond à une tabulation verticale (U+000B). |
\w |
Correspond à n'importe quel caractère alphanumérique, y compris le
tiret bas. C'est équivalent à
Ainsi, |
\W |
Correspond à n'importe quel caractère n'étant pas un caractère de mot.
Cela est équivalent à
Ainsi, |
\n |
Soit n un entier strictement positif, cela fait référence au groupe de la n-ième expression entre parenthèses (en comptant les parenthèses ouvrantes).
Ainsi, |
\0 |
Correspond au caractère NULL (U+0000). Il ne doit pas être suivi d'un
autre chiffre car \0<chiffres> est une
séquence d'échappement
pour les nombres en notation octale (si besoin d'utiliser un chiffre
ensuite, on pourra utiliser la forme \x00 , cf. ci-après).
|
\xhh |
Correspond au caractère dont le code hexadécimal est hh (deux chiffres hexadécimaux). |
\uhhhh |
Correspond au caractère dont le code est hhhh (quatre chiffres hexadécimaux). |
\u{hhhh} |
(Uniquement actif quand le marqueur u est activé)
Correspond au caractère dont la valeur Unicode est hhhh (en
chiffre hexadécimaux).
|
Objet | Propriété ou indice | Description | Pour cet exemple |
---|---|---|---|
monTableau |
La chaîne de caractères correspondante et les fragments de chaînes gardés en mémoire. | ["dbbd", "bb"] |
|
index |
L'indice (débute à partir de 0) de la correspondance, compté dans la chaîne de caractère initiale. | 1 |
|
input |
La chaîne de caractères initiale. | "cdbbdbsbz" |
|
[0] |
Les derniers caractères qui correspondent. | "dbbd" |
|
monExpressionRégulière |
lastIndex |
L'indice auquel débuter la prochaine correspondance. (Cette propriété n'est utilisée que si l'expression régulière utilise l'option g, décrite dans « Effectuer des recherches avancées avec les marqueurs ». | 5 |
source |
Le texte du motif, mis à jour à la création de l'expression régulière mais pas lors de son exécution. | "d(b+)d" |
Saisissez votre numéro de téléphone (avec indicatif) puis cliquez sur "Vérifier".
Le format attendu est ## ## ## ## ## ou +## # ## ## ## ##.