[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/RegExp [Back]  [Original]

RegExp - JavaScript | MDN

Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.

View in English Always switch to English

RegExp

Baseline Large disponibilit *

Cette fonctionnalit est bien tablie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2015.

* Certaines parties de cette fonctionnalit peuvent bnficier de prise en charge variables.

Un objet RegExp est utilis pour tudier les correspondances d'un texte avec un motif donn.

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

Dans cet article

Description

Notation littrale et constructeur

Il existe deux faons de crer un objet RegExp : une notation littrale ou un constructeur.

  • La notation littrale est dlimite par des barres obliques (slashes) et n'utilise pas de quotes
  • Pour le constructeur, les paramtres passs ne sont pas dlimits par des barres obliques mais par des quotes.

Ainsi, les expressions suivantes crent le mme objet d'expression rationnelle :

js
/ab+c/i; // notation littrale
new RegExp("ab+c", "i"); // constructeur
new RegExp(/ab+c/, "i"); // notation littrale dans un constructeur

La notation littrale effectue la compilation de l'expression rationnelle lorsque l'expression est value. Utilisez la notation littrale lorsque l'expression rationnelle reste constante. Par exemple, si vous utilisez la notation littrale pour construire une expression rationnelle utilise dans une boucle, l'expression rationnelle ne sera pas recompile chaque itration.

Le constructeur de l'objet expression rationnelle, par exemple new RegExp('ab+c'), effectue la compilation de l'expression rationnelle au moment de l'excution. Utilisez le constructeur quand vous savez que le motif d'une expression rationnelle sera variable, ou si vous ne connaissez pas le motif et que vous l'obtiendrez d'une autre source, comme un champ de saisie.

Utiliser des marqueurs avec le constructeur

partir d'ECMAScript 6, new RegExp(/ab+c/, 'i') ne dclenche plus d'exception TypeError ("can't supply flags when constructing one RegExp from another") lorsque le premier argument est une expression rationnelle et que le second argument marqueurs est prsent. Une nouvelle RegExp sera cre la place partir des arguments.

Lorsqu'on utilise le constructeur, les rgles normales d'chappement de chane (le fait de faire prcder d'un \ les caractres spciaux l'intrieur d'une chane) sont requises.

Par exemple, les dfinitions suivantes sont quivalentes :

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

Proprits semblables Perl

Plusieurs des proprits de RegExp ont un nom long et un nom court (semblable celui utilis par le langage Perl). Les deux noms font rfrence la mme valeur. Cela vient du fait que les expressions rationnelles JavaScript ont t conues en s'inspirant des expressions rationnelles Perl). Voir aussi les proprits dprcies de RegExp.

Constructeur

RegExp()

Cre un nouvel objet RegExp.

Proprits statiques

get RegExp[@@species]

La fonction de construction qui est utilise pour crer des objets drivs.

Proprits des instances

RegExp.prototype.flags

Une chane de caractres contenant les marqueurs de l'objet RegExp.

RegExp.prototype.dotAll

Indique si . correspond aux sauts de ligne.

RegExp.prototype.global

Indique si l'expression rationnelle cherche l'ensemble des correspondances dans la chane de caractres ou uniquement la premire.

RegExp.prototype.hasIndices

Indique si le rsultat de l'expression rationnelle indiquera les indices de dbut et de fin des sous-chanes captures.

RegExp.prototype.ignoreCase

Indique si la casse est ignore pour la recherche de correspondances dans une chane de caractres.

RegExp.prototype.multiline

Indique si la recherche de correspondances dans une chane se fait sur plusieurs lignes.

RegExp.prototype.source

Le texte du motif recherch.

RegExp.prototype.sticky

Indique si la recherche est adhrente.

RegExp.prototype.unicode

Indique si les fonctionnalits Unicode sont actives.

RegExp: lastIndex

L'indice partir duquel chercher la prochaine correspondance.

Mthodes des instances

RegExp.prototype.compile()

(Re)compile une expression rationnelle lors de l'excution d'un script.

RegExp.prototype.exec()

Excute une recherche de correspondance sur la chane de caractres passe en argument.

RegExp.prototype.test()

Teste la prsence d'une correspondance sur la chane de caractres passe en argument.

RegExp.prototype.toString()

Renvoie une chane de caractres reprsentant l'objet. Il s'agit d'une surcharge de la mthode Object.prototype.toString().

RegExp.prototype[@@match]()

Recherche une correspondance sur la chane de caractres donne en argument et renvoie le rsultat de la correspondance.

RegExp.prototype[@@matchAll]()

Renvoie l'ensemble des correspondances entre l'expression rationnelle et la chane de caractres passe en argument.

RegExp.prototype[@@replace]()

Remplace les correspondances trouves sur la chane de caractres passe en argument par une nouvelle sous-chane.

RegExp.prototype[@@search]()

Recherche une correspondance sur la chane de caractres donne en argument et renvoie l'indice partir duquel le motif a t trouv dans la chane.

RegExp.prototype[@@split]()

Dcoupe une chane de caractres donne en argument en un tableau.

Exemples

Utiliser une expression rationnelle pour modifier un format de donnes

Dans le script suivant, on utilise la mthode replace() de String pour effectuer une correspondance sur le prnom et le nom pour les inverser.

On utilise des parenthses capturantes pour pouvoir utiliser les correspondances dans la construction du rsultat (avec $1 et $2).

js
let re = /(\w+)\s(\w+)/;
let chaine = "Alain Dupont";
let nouvelleChaine = chaine.replace(re, "$2, $1");
console.log(nouvelleChaine);
// Dupont, Alain

Utiliser une expression rationnelle pour dcouper des lignes avec diffrents sauts de ligne/fins de ligne

La fin de ligne par dfaut dpend de la plateforme (Unix, Windows, etc.). Cette mthode de dcoupage fournie permet de dcouper indpendamment de la plateforme utilise.

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

On notera que l'ordre des modles dans l'expression rationnelle est important.

Utiliser une expression rationnelle sur plusieurs lignes

js
let 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'adhrence

Cet exemple illustre comment on peut utiliser le marqueur sticky qui recherche une correspondance aprs RegExp.prototype.lastIndex.

js
let str = "#toto#";
let regex = /toto/y;

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 (rinitialisation suite  l'chec)

Diffrence entre le marqueur d'adhrence et le marqueur global

Avec le marqueur d'adhrence y, la prochaine correspondance doit tre place la position fournie par lastIndex. En revanche, avec le marqueur global g, la correspondance peut avoir lieu la position indique par lastIndex ou aprs :

js
re = /\d/y;
while ((r = re.exec("123 456")))
  console.log(r, "ET re.lastIndex", re.lastIndex);

// [ '1', index: 0, input: '123 456', groups: undefined ] ET re.lastIndex 1
// [ '2', index: 1, input: '123 456', groups: undefined ] ET re.lastIndex 2
// [ '3', index: 2, input: '123 456', groups: undefined ] ET re.lastIndex 3
//   ... et ensuite il n'y a plus de correspondance

Avec le marqueur global g, les 6 chiffres auraient t trouvs (pas seulement 3).

Les expressions rationnelles et les caractres Unicode

Comme mentionn ci-avant, les classes \w ou \W ne correspondent qu' des caractres ASCII "a" "z", "A" "Z", "0" "9" et "_".

Pour effectuer des correspondances sur d'autres caractres (par exemple les caractres cyrilliques), on utilisera \uhhhh, o "hhhh" reprsente la valeur Unicode exprime en hexadcimal.

Cet exemple illustre comment il est possible de sparer les caractres Unicode d'un mot.

js
let texte = " text   ";
let regex = /[\u0400-\u04FF]+/g;

let corresp = regex.exec(texte);
console.log(corresp[0]); // affiche ''
console.log(regex.lastIndex); // affiche '7'

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

// et ainsi de suite

Les chappements de proprit Unicode, plus rcents, permettent une solution plus lgante en utilisant \p{scx=Cyrl} la place.

Extraire un sous-domaine d'une URL

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

Note : Cet exemple est uniquement illustratif. Pour analyser une URL, mieux vaudra utiliser les outils adapts et notamment l'API URL.

Spcifications

Spcification
ECMAScript 2027 LanguageSpecification
# sec-regexp-regular-expression-objects

Compatibilit des navigateurs

Notes spcifiques 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 dsormais undefined et non la chane vide :

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

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

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

Voir aussi


Web Proxy Viewer  |  New URL  |  Original Page