cf https://developer.mozilla.org/fr/docs/Web/JavaScript/Guide/Regular_Expressions

Création d'une expression régulière

On peut utiliser un littéral d'expression régulière, qui correspond à un motif contenu entre deux barres obliques, par exemple :

let re = /jolie/;

On peut également appeler le constructeur de l'objet RegExp, par exemple :

let re = new RegExp("jolie");

Exécution de l'expression régullière

let re = new RegExp("jolie");
let results = re.exec(str);
console.log(results);//["jolie", index: 6, input: "Ok la jolie chaîne de caractères", groups: undefined]

La méthode exec() exécute la recherche d'une correspondance sur une chaîne de caractères donnée. Elle renvoie un tableau contenant les résultats ou null.

Si on souhaite uniquement savoir s'il y a une correspondance, on utilisera la méthode

RegExp.prototype.test()

ou la méthode

String.prototype.search().

Caractères spéciaux 

Caractères spéciaux utilisables pour les expressions rationnelles.
Caractère Signification
\

Correspond selon les règles suivantes :

Une barre oblique inversée (backslash) précédant un caractère non spécial indique que le caractère qui suit est spécial et qu'il ne doit pas être interprété directement. Ainsi, un 'b', sans \ avant, correspondra pour les 'b' minuscules quel que soit leur position. En revanche '\b' ne correspondra à aucun caractère mais indique un caractère de fin de mot.

Un backslash précédant un caractère spécial indique que le caractère qui suit doit être interprété littéralement (et non pas comme un caractère spécial). Ainsi, le motif /a*/ utilise le caractère spécial '*' pour correspondre à 0 ou plusieurs 'a'. Le motif /a\*/, au contraire, rend '*' non-spécial pour correspondre aux chaînes de caractères qui comportent la lettre a et une astérisque, comme 'a*'.

Il ne faut pas oublier d'échapper le caractère \ car lui-même est un caractère d'échappement dans les chaînes de caractères. Cela est utile lorsqu'on utilise la notation RegExp("motif").

^ 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, /t$/ ne correspond pas au 't' de "printemps", mais correspond au 't' de "aliment".

*

Correspond à l'expression précédente qui est répétée 0 ou plusieurs fois. Équivalent à {0,}

Ainsi, /bo*/ correspond à 'boo' dans "Un booléen" et à 'b' dans "Un bateau bleu", mais ne correspond à rien dans "Ce matin".

+

Correspond à l'expression précédente qui est répétée une ou plusieurs fois. C'est équivalent à {1,}.

Ainsi, /a+/ correspond au 'a' dans "maison" et à tous les 'a' dans "maaaaaaison" mais ne correspond à rien dans "mission".

? 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, /.n/ correspond à 'un' et 'en' dans "Un baobab nain en cours de croissance" mais pas à 'nain'.

Si le marqueur s (dotAll) est utilisé, le point correspondra également aux caractères de saut de ligne.

(x)

Correspond à 'x' et garde la correspondance en mémoire. Les parenthèses permettent de capturer l'expression dans un « groupe ».

Les '(toto)' et '(truc)', dans le motif /(toto) (truc) \1 \2/ correspondent et gardent en mémoire les deux premiers mots de la chaîne de caractère "toto truc toto truc". Les \1 et \2 du motif correspondent respectivement à la première et à la deuxième correspondances pour les sous-chaînes entre parenthèses. Lorsqu'on souhaite effectuer un remplacement, on utilisera $1 et $2 pour faire référence au premier et second groupe et $n pour faire référence au n-ième groupe capturé (ex. ('toto truc'.replace(/(...) (...)/, '$2 $1'). $& fera référence à la chaîne entière).

(?: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, /Jack(?=Sparrow)/ correspond à 'Jack' seulement s'il est suivi de 'Sparrow'. /Jack(?=Sparrow|Bauer)/ correspond à 'Jack' seulement s'il est suivi de 'Sparrow' ou de 'Bauer'. Cependant, ni 'Sparrow' ni 'Bauer' ne feront partie de la correspondance.

x(?!y)

Correspond à 'x' seulement si 'x' n'est pas suivi de 'y'.

Ainsi, /\d+(?!\.)/ correspond à un nombre qui n'est pas suivi par un point, cette expression utilisée avec la chaîne 3.141 correspondra pour '141' mais pas pour '3.141'.

(?<=y)x

Correspond à x seulement si x est précédé par y. C'est ce qu'on appelle une recherche arrière (lookbehind).

Ainsi /(?<=Jack)Sprat/ correspond à "Sprat" seulement s'il est précédé de "Jack".
/(?<=Jack|Tom)Sprat/ correspond à "Sprat" seulement s'il est précédé de "Jack" ou "Tom".
Toutefois, "Jack" et "Tom" ne feront pas partie de la correspondance.

(?<!y)x

Correspond à x uniquement si x n'est pas précédé par y (parfois appelée en anglais negated lookbehind).

Ainsi, /(?<!-)\d+/ correspondra à un nombre seulement si celui-ci n'est pas précédé d'un signe moins.
/(?<!-)\d+/.exec('3') cible "3".
/(?<!-)\d+/.exec('-3') ne trouve aucune correspondance car le nombre est précédé d'un signe.

x|y

Correspond à 'x' ou 'y'.

Ainsi, /vert|rouge/ correspond à 'vert' dans "feu vert" et à 'rouge' dans "feu rouge".

{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 n occurences de l'expression précédente. n doit être un entier positif.

Par exemple /a{2,}/ correspondra à "aa" ou à "aaa" ou encore à "aaaa" mais pas à "a".

{n,m}

Lorsque n et m sont des entiers positifs, cela correspond à au moins n occurences de l'expression précédente et à au plus m occurrences. Lorsque m n'est pas utilisé, la valeur par défaut correspondante sera l'infini.

Ainsi, /a{1,3}/ ne correspond à rien dans "Mozill", au 'a' de "Mozilla", au deux premiers 'a' de "Mozillaa" et au trois premiers 'a' de "Mozillaaaaa". Pour ce dernier exemple, on doit noter que le correspondance ne se fait que sur "aaa" bien qu'il y ait plus de 'a' dans la chaîne de caractères.

[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, [^abc] est équivalent à [^a-c]. Ils correspondent à 'u' dans "bulle" et à 'i' dans "ciel".

[\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 [\b].)

Exemples :
/\bm/ correspond au 'm' dans "mignon" ;
/no\b/ ne correspond pas au 'no' de "mignon" car 'no' est suivi de 'n' qui n'est pas un caractère de limite de mot;
/non\b/ correspond au 'non' de "mignon" car 'non' représente la fin de la chaîne de caractère et n'est donc pas suivi par un caractère de mot.
/\w\b\w/ ne correspondra jamais à quoi que ce soit car un caractère de mot ne peut pas être suivi à la fois par un caractère de mot et un caractère n'étant pas un caractère de mot.

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 :

  • Avant le premier caractère d'une chaîne de caractères
  • Après le dernier caractère d'une chaîne de caractères
  • Entre deux caractères de mot
  • Entre deux caractères qui ne sont pas des caractères de mot
  • Avec la chaîne vide.

Ainsi, /\B../ correspond au 'oo' de "football" (et /e\B./ correspond au 'er' dans "une mer "

\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, /\cM/ correspond au caractère de contrôle M (U+000D) d'une chaîne de caractère.

\d

Correspond à un chiffre et est équivalent à [0-9].

Ainsi, /\d/ ou /[0-9]/ correspond à '2' dans "H2O est la molécule de l'eau".

\D

Correspond à tout caractère qui n'est pas un chiffre et est équivalent à [^0-9].

Ainsi, /\D/ ou /[^0-9]/ correspond à 'H' dans "H2O est la molécule de l'eau".

\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 à [ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff].

Ainsi, /\s\w*/ correspond à ' toto' dans "truc toto".

\S

Correspond à un caractère qui n'est pas un blanc. C'est équivalent à [^ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff].

Ainsi, /\S\w*/ correspond à 'truc' dans "truc toto".

\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 à [A-Za-z0-9_].

Ainsi, /\w/ correspond à 'l' dans "licorne", à '5' dans "5,28€", et à '3' dans "3D."

\W

Correspond à n'importe quel caractère n'étant pas un caractère de mot. Cela est équivalent à [^A-Za-z0-9_].

Ainsi, /\W/ ou /[^A-Za-z0-9_]/ correspond à '%' dans "50%."

\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, /pomme(,)\spoire\1/ correspond à 'pomme, poire,' dans "pomme, poire, cerise, pêche".

\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).