Le constructeur RegExp crée un objet expression rationnelle pour la reconnaissance d'un modèle dans un texte.

Pour une introduction aux expressions rationnelles, lire le chapitre Expressions rationnelles dans le Guide JavaScript.

Syntaxe

Les notations littérales, par constructeur ou de base sont possibles :

/modèle/marqueurs
new RegExp(modèle[, marqueurs])
RegExp(modèle[, marqueurs])

Paramètres

modèle
Le texte de l'expression rationnelle ou, à partir d'ES5, un autre objet ou littéral RegExp à copier. Ce motif peut inclure certains caractères spéciaux pour correspondre à un ensemble de valeurs plus large (qu'une simple chaîne littérale).
marqueurs

Si cet argument est utilisé, il indique les marqueurs à utiliser pour l'expression rationnelle. Ces valeurs remplaceront celles de l'objet à copier si modèle est un objet RegExp (lastIndex sera réinitialisé à 0 à partir d'ECMAScript 2015 / ES6). Cet argument est une chaîne de caractères qui peut contenir une combinaison des valeurs suivantes:

g
recherche globale ; retrouve toutes les correspondances plutôt que de s'arrêter après la première.
i
la casse est ignorée. Si le marqueur u est également activé, les caractères Unicode équivalents pour la casse correspondent.
m
multiligne : les caractères de début et de fin (^ et $) sont traités comme travaillant sur des lignes multiples (i.e, ils correspondent au début et à la fin de chaque ligne (délimitée par \n ou \r), pas seulement au début ou à la fin de la chaîne d'entrée complète).
u
unicode : traite le modèle comme une séquence de points de code Unicode (voir également les chaînes binaires).
y
adhérence : n'établit de correspondance qu'à partir de l'indice dans la chaîne cible indiqué par la propriété lastIndex de l'expression rationnelle (et ne cherche pas à établir de correspondance à partir d'indices au delà).
s
"dotAll" : permet d'indiquer que . peut correspondre à un saut de ligne.

Description

Il existe deux façons de créer un objet RegExp : une notation littérale ou un constructeur. La notation littérale est délimitée par des barres obliques (slashes) tandis que le constructeur utilise des apostrophes. Ainsi, les expressions suivantes créent la même expression rationnelle :

/ab+c/i;                   // notation littérale
new RegExp('ab+c', 'i');   // constructeur
new RegExp(/ab+c/, 'i');   // notation littérale dans un constructeur

La notation littérale effectue la compilation de l'expression rationnelle lorsque l'expression est évaluée. Utilisez la notation littérale lorsque l'expression rationnelle reste constante. Par exemple, si vous utilisez la notation littérale pour construire une expression rationnelle utilisée dans une boucle, l'expression rationnelle ne sera pas recompilée à chaque itération.

Le constructeur de l'objet expression rationnelle, par exemple new RegExp('ab+c'), effectue la compilation de l'expression rationnelle au moment de l'exécution. Utilisez la fonction constructeur quand vous savez que le modèle d'une expression rationnelle sera variable, ou si vous ne connaissez pas le modèle et que vous l'obtiendrez d'une autre source, telle qu'une saisie utilisateur.

À partir d'ECMAScript 6, new RegExp(/ab+c/, 'i') ne déclenche plus d'exception TypeError ("can't supply flags when constructing one RegExp from another") lorsque le premier argument est une RegExp et que le second argument marqueurs est présent. Une nouvelle RegExp sera créée à la place à partir des arguments.

Lorsqu'on utilise le constructeur, les règles normales d'échappement de chaîne (le fait de faire précéder d'un \ les caractères spéciaux à l'intérieur d'une chaîne) sont requises. Par exemple, les définitions suivantes sont équivalentes :

var re = /\w+/;
var re = new RegExp('\\w+');

Propriétés

RegExp.prototype
Cette propriété permet d'ajouter des propriétés à tous les objets qui sont des expressions rationnelles.
RegExp.length
La valeur de longueur pour le constructeur dont la valeur est 2.
get RegExp[@@species]
La fonction de construction utilisée pour créer les objets dérivés.
RegExp.lastIndex
L'indice à partir duquel rechercher la prochaine correspondance.

Méthodes

L'objet global RegExp ne possède pas de méthode propre. En revanche, il hérite de certaines méthodes via sa chaîne de prototypes.

Le prototype de RegExp et les instances

Propriétés

Voir également la page sur les propriétés dépréciées de RegExp.

On notera que plusieurs des propriétés de RegExp ont un nom court et un nom long (semblable aux noms Perl). Le nom court et le nom long font référence à la même propriété. La modélisation des expressions rationnelles JavaScript est basée sur celle de Perl, un autre langage de programmation.

RegExp.prototype.constructor
Définit la fonction qui crée le prototype d'un objet.
RegExp.prototype.flags
Une chaîne qui contient les drapeaux (flags) utilisés pour l'objet RegExp.
RegExp.prototype.dotAll
Indique si . peut correspondre à des sauts de ligne.
RegExp.prototype.global
Définit si l'expression rationnelle doit relever la première correspondance d'une chaîne ou toutes les correspondances.
RegExp.prototype.ignoreCase
Définit si l'expression rationnelle doit ignorer la casse ou non pour détecter une correspondance.
RegExp.prototype.multiline
Définit si la recherche de la correspondance s'effectue sur plusieurs lignes ou sur une seule.
RegExp.prototype.source
Le texte du motif (pattern) à rechercher.
RegExp.prototype.sticky
Définit si la recherche s'effectue uniquement à partir de lastIndex ou non.
RegExp.prototype.unicode
Cette propriété indique si les fonctionnalités Unicode sont activées ou non.

Méthodes

Regexp.prototype.compile()
(Re)compile une expression rationnelle lors de l'exécution d'un script.
RegExp.prototype.exec()
Exécute une recherche de correspondance sur la chaîne de caractères fournie en paramètre.
RegExp.prototype.test()
Teste s'il y a une correspondance dans la chaîne de caractères fournie en paramètre.
RegExp.prototype[@@match]()
Teste une correspondance sur une chaîne de caractères donnée et renvoie le résultat du test.
RegExp.prototype[@@matchAll]()
Renvoie l'ensemble des correspondances d'une expression rationnelle sur une chaîne.
RegExp.prototype[@@replace]()
Remplace les correspondances d'une chaîne de caractères avec une nouvelle sous-chaînes.
RegExp.prototype[@@search]()
Recherche la correspondance dans une chaîne de caractères donnée et renvoie la position où est trouvé le motif.
RegExp.prototype[@@split]()
Découpe une chaîne de caractères en un tableau de sous-chaînes.
RegExp.prototype.toSource()
Renvoie un littéral objet représentant l'objet spécifié. Cette méthode peut être utilisée pour créer un nouvel objet. Elle surcharge la méthode Object.prototype.toSource().
RegExp.prototype.toString()
Renvoie une chaîne de caractères représentant l'objet spécifié. Cette méthode surcharge Object.prototype.toString().

Exemples

Utiliser une expression rationnelle pour modifier un format de données

Dans le script suivant, on utilise la méthode replace() de String pour effectuer une correspondance sur le prénom et le nom pour les inverser. On utilise des parenthèses capturantes pour pouvoir utiliser les correspondances dans la construction du résultat (avec $1 et $2).

var re = /(\w+)\s(\w+)/;
var chaîne = 'Alain Dupont';
var nouvelleChaîne = chaîne.replace(re, '$2, $1');
console.log(nouvelleChaîne);

Cela affichera "Dupont, Alain".

Utiliser une expression rationnelle pour découper des lignes avec différents sauts de ligne/fins de ligne

La fin de ligne par défaut dépend de la plateforme (Unix, Windows, etc.). Cette méthode de découpage fournie permet de découper indépendamment de la plateforme utilisée.

var texte = 'Un texte\net un autre\r\npuis ensuite\rla fin';
var lignes = texte.split(/\r\n|\r|\n/);
console.log(lignes); // affiche [ 'Un texte', 'et un autre', 'puis ensuite', 'la fin' ]

On voit ici que l'ordre des modèles dans l'expression rationnelle importe.

Utiliser une expression rationnelle sur plusieurs lignes

var s = 'Et voici\nune autre ligne !';
s.match(/voici.*ligne/);
// Renvoie null
s.match(/voici[^]*ligne/);
// Renvoie ['voici\nune autre ligne']

Utiliser une expression rationnelle avec le marqueur d'adhérence

Cet exemple illustre comment on peut utiliser ce marqueur qui recherche une correspondance après RegExp.prototype.lastIndex.

var str = '#toto#';
var regex = /toto/y;

regex.lastIndex; // 0
regex.test(str); // true
regex.lastIndex = 1;
regex.test(str); // true
regex.lastIndex = 5;
regex.test(str); // false (lastIndex est pris en compte avec ce marqueur)
regex.lastIndex; // 0 (réinitialisation suite à l'échec)

Les expressions rationnelles et les caractères Unicode

Comme mentionné ci-avant, les classes \w ou \W ne correspondent qu'à des caractères ASCII "a" à "z", "A" à "Z", "0" à "9" et "_". Pour effectuer des correspondances sur d'autres caractères (comme par exemple les caractères cyrilliques), on utilisera \uhhhh, où "hhhh" représente la valeur Unicode exprimée en hexadécimal. Cet exemple illustre comment il est possible de séparer les caractères Unicode d'un mot.

var texte = 'Образец text на русском языке';
var regex = /[\u0400-\u04FF]+/g;

var corresp = regex.exec(texte);
console.log(corresp[0]);      // affiche 'Образец'
console.log(regex.lastIndex); // affiche '7'

var corresp2 = regex.exec(texte);
console.log(corresp2[0]);     // affiche 'на' (n'affiche pas text
console.log(regex.lastIndex); // affiche '15'

// et ainsi de suite

Voici une ressource tierce pour obtenir les différents intervalles Unicode des différents alphabets : Regexp-unicode-block.

Extraire un sous-domaine d'une URL

var url = 'http://xxx.domaine.com';
console.log(/[^.]+/.exec(url)[0].substr(7)); // affiche 'xxx'

Spécifications

Spécification État Commentaires
ECMAScript 1st Edition (ECMA-262) Standard Définition initiale. Implémentée avec JavaScript 1.1.
ECMAScript 5.1 (ECMA-262)
La définition de 'RegExp' dans cette spécification.
Standard
ECMAScript 2015 (6th Edition, ECMA-262)
La définition de 'RegExp' dans cette spécification.
Standard

Le constructeur RegExp ne renvoie plus d'exception lorsqu'il est utilisé avec un objet RegExp et que le second argument est utilisé. Ajout du marqueur d'adhérence et du marqueur Unicode.

ECMAScript Latest Draft (ECMA-262)
La définition de 'RegExp' dans cette spécification.
Projet

Compatibilité des navigateurs

Update compatibility data on GitHub
OrdinateurMobileServeur
ChromeEdgeFirefoxInternet ExplorerOperaSafariWebview AndroidChrome pour AndroidFirefox pour AndroidOpera pour AndroidSafari sur iOSSamsung InternetNode.js
RegExpChrome Support complet OuiEdge Support complet OuiFirefox Support complet 1IE Support complet OuiOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
compile
Obsolète
Chrome Support complet OuiEdge Support complet 12Firefox Support complet 1IE Support complet OuiOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
dotAllChrome Support complet 62Edge Aucun support NonFirefox Aucun support NonIE Aucun support NonOpera Support complet 49Safari Support complet 12WebView Android Support complet 62Chrome Android Support complet 62Firefox Android Aucun support NonOpera Android Support complet 46Safari iOS Support complet 12Samsung Internet Android Support complet Ouinodejs Support complet 8.10.0
Support complet 8.10.0
Support complet 8.3.0
Désactivée
Désactivée From version 8.3.0: this feature is behind the --harmony runtime flag.
execChrome Support complet OuiEdge Support complet 12Firefox Support complet 1IE Support complet OuiOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
flagsChrome Support complet OuiEdge Support complet Oui
Désactivée
Support complet Oui
Désactivée
Désactivée This feature is behind the Experimental JavaScript Features preference.
Firefox Support complet 37IE Aucun support NonOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 37Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet 6.0.0
globalChrome Support complet OuiEdge Support complet 12Firefox Support complet 1IE Support complet OuiOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
ignoreCaseChrome Support complet OuiEdge Support complet 12Firefox Support complet 1IE Support complet OuiOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
RegExp.input ($_)
Non-standard
Chrome Support complet OuiEdge Support complet 12Firefox Support complet 1IE Support complet OuiOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
lastIndexChrome Support complet OuiEdge Support complet 12Firefox Support complet 1IE Support complet OuiOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
RegExp.lastMatch ($&)
Non-standard
Chrome Support complet OuiEdge Support complet 12Firefox Support complet 1IE Support complet OuiOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
RegExp.lastParen ($+)
Non-standard
Chrome Support complet OuiEdge Support complet 12Firefox Support complet 1IE Support complet OuiOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
RegExp.leftContext ($`)
Non-standard
Chrome Support complet OuiEdge Support complet 12Firefox Support complet 1IE Support complet OuiOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
lookbehind assertions ((?<= ) and (?<! ))Chrome Support complet 62Edge Aucun support NonFirefox Aucun support Non
Notes
Aucun support Non
Notes
Notes See bug 1225665.
IE Aucun support NonOpera Support complet 49Safari Aucun support NonWebView Android Support complet 62Chrome Android Support complet 62Firefox Android Aucun support Non
Notes
Aucun support Non
Notes
Notes See bug 1225665.
Opera Android Support complet 46Safari iOS Aucun support NonSamsung Internet Android Support complet Ouinodejs Support complet 8.10.0
multilineChrome Support complet OuiEdge Support complet 12Firefox Support complet 1IE Support complet OuiOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
RegExp.$1-$9
Non-standard
Chrome Support complet OuiEdge Support complet OuiFirefox Support complet 1IE Support complet OuiOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
Unicode property escapes (\p{...})Chrome Support complet 64Edge ? Firefox Aucun support NonIE ? Opera Support complet 51Safari ? WebView Android Support complet 64Chrome Android Support complet 64Firefox Android Aucun support NonOpera Android Support complet 47Safari iOS ? Samsung Internet Android Support complet Ouinodejs Support complet 10.0.0
Support complet 10.0.0
Support complet 8.3.0
Désactivée
Désactivée From version 8.3.0: this feature is behind the --harmony runtime flag.
prototypeChrome Support complet OuiEdge Support complet OuiFirefox Support complet 1IE Support complet OuiOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
RegExp.rightContext ($')
Non-standard
Chrome Support complet OuiEdge Support complet 12Firefox Support complet 1IE Support complet OuiOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
sourceChrome Support complet OuiEdge Support complet 12Firefox Support complet 1IE Support complet OuiOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
stickyChrome Support complet 49Edge Support complet 13Firefox Support complet 3IE Aucun support NonOpera Support complet 36Safari Support complet 10WebView Android Support complet 49Chrome Android Support complet 49Firefox Android Support complet 4Opera Android Support complet 36Safari iOS Support complet 10Samsung Internet Android Support complet 5.0nodejs Support complet Oui
testChrome Support complet OuiEdge Support complet 12Firefox Support complet 1IE Support complet OuiOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
toSource
Non-standard
Chrome Aucun support NonEdge Aucun support NonFirefox Support complet 1IE Aucun support NonOpera Aucun support NonSafari Aucun support NonWebView Android Aucun support NonChrome Android Aucun support NonFirefox Android Support complet 4Opera Android Aucun support NonSafari iOS Aucun support NonSamsung Internet Android Aucun support Nonnodejs Aucun support Non
toStringChrome Support complet OuiEdge Support complet OuiFirefox Support complet 1IE Support complet OuiOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui
unicodeChrome Support complet 50Edge Support complet 12
Notes
Support complet 12
Notes
Notes Case folding is implemented in version 13
Firefox Support complet 46IE Aucun support NonOpera Support complet 37Safari Support complet 10WebView Android Support complet OuiChrome Android Support complet 50Firefox Android Support complet 46Opera Android Support complet 37Safari iOS Support complet 10Samsung Internet Android Support complet 5.0nodejs Support complet Oui
@@matchChrome Support complet OuiEdge Support complet OuiFirefox Support complet 49IE Aucun support NonOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 49Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet 6.0.0
@@matchAllChrome Support complet 73Edge Aucun support NonFirefox Support complet 67IE Aucun support NonOpera Support complet 60Safari Aucun support NonWebView Android Support complet 73Chrome Android Support complet 73Firefox Android Support complet 67Opera Android Support complet OuiSafari iOS Aucun support NonSamsung Internet Android Support complet Ouinodejs Support complet 12.0.0
@@replaceChrome Support complet OuiEdge Support complet OuiFirefox Support complet 49IE Aucun support NonOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 49Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet 6.0.0
@@searchChrome Support complet OuiEdge Support complet OuiFirefox Support complet 49IE Aucun support NonOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 49Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet 6.0.0
@@speciesChrome Support complet OuiEdge Support complet OuiFirefox Support complet 49IE Aucun support NonOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 49Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet 6.5.0
Support complet 6.5.0
Support complet 6.0.0
Désactivée
Désactivée From version 6.0.0: this feature is behind the --harmony runtime flag.
@@splitChrome Support complet OuiEdge Support complet OuiFirefox Support complet 49IE Aucun support NonOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 49Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet 6.0.0

Légende

Support complet  
Support complet
Aucun support  
Aucun support
Compatibilité inconnue  
Compatibilité inconnue
Fonctionnalité non-standard. Celle-ci peut être incorrectement supportée par les autres navigateurs.
Fonctionnalité non-standard. Celle-ci peut être incorrectement supportée par les autres navigateurs.
Obsolète. Les nouveaux sites web ne doivent pas utiliser cette fonctionnalité.
Obsolète. Les nouveaux sites web ne doivent pas utiliser cette fonctionnalité.
Voir les notes d'implémentation.
Voir les notes d'implémentation.
Une action explicite de l'utilisateur est nécessaire pour activer cette fonctionnalité.
Une action explicite de l'utilisateur est nécessaire pour activer cette fonctionnalité.

Notes spécifiques à Firefox

À partir de Firefox 34, dans le cas où on utilise un groupe capturant avec des quantificateurs qui l'invalident, le texte correspondant au groupe est désormais undefined et non la chaîne vide :

// Firefox 33 ou antérieur
'x'.replace(/x(.)?/g, function(m, group) {
  console.log("'group:" + group + "'");
}); // 'group:'

// Firefox 34 ou supérieur
'x'.replace(/x(.)?/g, function(m, group) {
  console.log("'group:" + group + "'");
}); // 'group:undefined'

Pour des raisons de compatibilité web, RegExp.$N renverra une chaîne vide au lieu de undefined (bug 1053944).

Voir aussi

Étiquettes et contributeurs liés au document

Dernière mise à jour par : SphinxKnight,