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

RegExp.prototype.exec() - 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.prototype.exec()

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.

La mthode exec() excute la recherche d'une correspondance sur une chane de caractres donne. Elle renvoie un tableau contenant les rsultats ou null.

Si on souhaite uniquement savoir s'il y a une correspondance, on utilisera la mthode RegExp.prototype.test() ou la mthode String.prototype.search().

Dans cet article

Exemple interactif

const regex1 = RegExp("foo*", "g");
const str1 = "table football, foosball";
let array1;

while ((array1 = regex1.exec(str1)) !== null) {
  console.log(`Found ${array1[0]}. Next starts at ${regex1.lastIndex}.`);
  // Expected output: "Found foo. Next starts at 9."
  // Expected output: "Found foo. Next starts at 19."
}

Les objets reprsentant des expressions rationnelles gardent un tat en mmoire lorsqu'ils utilisent les marqueurs global ou sticky et ils gardent notamment en mmoire lastIndex partir de la correspondance prcdemment trouve. Ainsi, exec() peut tre utilise afin de parcourir plusieurs correspondances dans un texte (avec des groupes capturants) (contrairement String.prototype.match()).

Syntaxe

js
regexObj.exec(chane);

Paramtres

chane

La chane de caractres dans laquelle on recherche la correspondance dcrite par l'expression rationnelle.

Valeur de retour

S'il y a une correspondance, la mthode exec() renvoie un tableau (contenant des lments et deux proprits index et values, cf. ci-aprs) et met jour les proprits de l'objet reprsentant l'expression rationnelle (notamment lastIndex). Le tableau renvoy contient le texte qui correspond dans le premier lment puis un lment pour chaque groupe captur dans les parenthses capturantes.

S'il n'y a aucune correspondance, la mthode exec() renvoie null et la proprit lastIndex reoit la valeur 0.

Description

Si on a l'exemple suivant :

js
// On a une correspondance si on a "quick brown" suivi par "jumps", on ignore les caractres entre
// On garde en mmoire "brown" et "jumps"
// On ignore la casse
var re = /quick\s(brown).+?(jumps)/gi;
var result = re.exec("The Quick Brown Fox Jumps Over The Lazy Dog");

Le tableau suivant montre l'tat rsultant suite ce script :

Objet Proprit/Index Description Exemple
result [0] La chane complte des caractres qui correspondent. "Quick Brown Fox Jumps"
[1], ...[n ] Les sous-chanes correspondantes aux groupes capturants s'il y en a. Le nombre de groupes de parenthses capturantes est illimit. result[1] === "Brown"
result[2] === "Jumps"
index L'indice (compt partir de 0) de la correspondance dans la chane. 4
input La chane de caractres utilise en entre. "The Quick Brown Fox Jumps Over The Lazy Dog"
re lastIndex L'indice partir duquel chercher la prochaine correspondance. Lorsque le drapeau "g" est absent, cette proprit sera 0. 25
ignoreCase Indique si le drapeau "i" a t utilis pour ignorer la casse. true
global Indique si le drapeau "g" a t utilis pour la correspondance globale. true
multiline Indique si le drapeau "m" a t utilis pour chercher une correspondance sur plusieurs lignes. false
source Le texte du motif. "quick\s(brown).+?(jumps)"

Exemples

Trouver des correspondances successives

Si on utilise le drapeau "g" dans l'expression rationnelle, on peut utiliser la mthode exec() plusieurs fois afin de trouver les correspondances successives dans la chane. Lorsqu'on procde ainsi, la recherche reprend la position indique par la proprit lastIndex (test() fera galement progresser la proprit lastIndex).

On notera que la proprit lastIndex ne sera pas rinitialise lors de la recherche sur une autre chane de caractres, c'est la valeur existante de lastIndex qui sera utilise.

Par exemple, si on utilise le fragment de code suivant :

js
var maRegex = /ab*/g;
var str = "abbcdefabh";
var monTableau;
while ((monTableau = maRegex.exec(str)) !== null) {
  var msg = "Trouv " + monTableau[0] + ". ";
  msg += "Prochaine correspondance  partir de " + maRegex.lastIndex;
  console.log(msg);
}

Le script affichera alors :

Trouv abb. Prochaine correspondance  partir de 3
Trouv ab. Prochaine correspondance  partir de 9

Attention : Il ne faut pas placer un littral d'expression rationnelle (ou le constructeur RegExp) au sein de la condition while car cela crerait un boucle infinie s'il y a une correspondance car la proprit lastIndex serait redfinie chaque itration. Il faut galement s'assurer que le drapeau global est dfini sinon on aura galement une boucle.

Utiliser exec() avec des littraux

Il est aussi possible d'utiliser exec() sans crer d'objet RegExp explicite :

js
var matches = /(coucou \S+)/.exec("Ceci est un coucou monde !");
console.log(matches[1]);

Cela affichera 'coucou monde !'.

Spcifications

Spcification
ECMAScript 2027 LanguageSpecification
# sec-regexp.prototype.exec

Compatibilit des navigateurs

Voir aussi


Web Proxy Viewer  |  New URL  |  Original Page