From bf8e099b9c8b3c60d60b3712b4fc97b052c39887 Mon Sep 17 00:00:00 2001 From: julieng Date: Tue, 3 Aug 2021 08:03:23 +0200 Subject: convert content to md --- .../reference/global_objects/regexp/exec/index.md | 271 ++++++++++----------- 1 file changed, 130 insertions(+), 141 deletions(-) (limited to 'files/fr/web/javascript/reference/global_objects/regexp/exec') diff --git a/files/fr/web/javascript/reference/global_objects/regexp/exec/index.md b/files/fr/web/javascript/reference/global_objects/regexp/exec/index.md index 3245c98358..be53ae8ddd 100644 --- a/files/fr/web/javascript/reference/global_objects/regexp/exec/index.md +++ b/files/fr/web/javascript/reference/global_objects/regexp/exec/index.md @@ -10,118 +10,136 @@ tags: translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/exec original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/exec --- -
{{JSRef}}
+{{JSRef}} -

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 {{jsxref("null")}}.

+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 {{jsxref("null")}}. -

Si on souhaite uniquement savoir s'il y a une correspondance, on utilisera la méthode {{jsxref("RegExp.prototype.test()")}} ou la méthode {{jsxref("String.prototype.search()")}}.

+Si on souhaite uniquement savoir s'il y a une correspondance, on utilisera la méthode {{jsxref("RegExp.prototype.test()")}} ou la méthode {{jsxref("String.prototype.search()")}}. -
{{EmbedInteractiveExample("pages/js/regexp-prototype-exec.html")}}
+{{EmbedInteractiveExample("pages/js/regexp-prototype-exec.html")}} +Les objets représentant des expressions rationnelles gardent un état en mémoire lorsqu'ils utilisent les marqueurs {{jsxref("RegExp.global", "global")}} ou {{jsxref("RegExp.sticky", "sticky")}} et ils gardent notamment en mémoire {{jsxref("RegExp.lastIndex", "lastIndex")}} à partir de la correspondance précédemment trouvée. Ainsi, `exec()` peut être utilisée afin de parcourir plusieurs correspondances dans un texte (avec des groupes capturants) (contrairement à {{jsxref("String.prototype.match()")}}). +## Syntaxe -

Les objets représentant des expressions rationnelles gardent un état en mémoire lorsqu'ils utilisent les marqueurs {{jsxref("RegExp.global", "global")}} ou {{jsxref("RegExp.sticky", "sticky")}} et ils gardent notamment en mémoire {{jsxref("RegExp.lastIndex", "lastIndex")}} à partir de la correspondance précédemment trouvée. Ainsi, exec() peut être utilisée afin de parcourir plusieurs correspondances dans un texte (avec des groupes capturants) (contrairement à {{jsxref("String.prototype.match()")}}).

+ regexObj.exec(chaîne) -

Syntaxe

+### Paramètres -
regexObj.exec(chaîne)
+- `chaîne` + - : La chaîne de caractères dans laquelle on recherche la correspondance décrite par l'expression rationnelle. -

Paramètres

+### Valeur de retour -
-
chaîne
-
La chaîne de caractères dans laquelle on recherche la correspondance décrite par l'expression rationnelle.
-
+S'il y a une correspondance, la méthode `exec()` renvoie un tableau (contenant des éléments et deux propriétés `index` et `values`, cf. ci-après) et met à jour les propriétés de l'objet représentant l'expression rationnelle (notamment {{jsxref("RegExp.lastIndex", "lastIndex")}}). Le tableau renvoyé contient le texte qui correspond dans le premier élément puis un élément pour chaque groupe capturé dans les parenthèses capturantes. -

Valeur de retour

+S'il n'y a aucune correspondance, la méthode `exec()` renvoie {{jsxref("null")}} et la propriété {{jsxref("RegExp.lastIndex", "lastIndex")}} reçoit la valeur 0. -

S'il y a une correspondance, la méthode exec() renvoie un tableau (contenant des éléments et deux propriétés index et values, cf. ci-après) et met à jour les propriétés de l'objet représentant l'expression rationnelle (notamment {{jsxref("RegExp.lastIndex", "lastIndex")}}). Le tableau renvoyé contient le texte qui correspond dans le premier élément puis un élément pour chaque groupe capturé dans les parenthèses capturantes.

+## Description -

S'il n'y a aucune correspondance, la méthode exec() renvoie {{jsxref("null")}} et la propriété {{jsxref("RegExp.lastIndex", "lastIndex")}} reçoit la valeur 0.

+Si on a l'exemple suivant : -

Description

- -

Si on a l'exemple suivant :

- -
// On a une correspondance si on a "quick brown" suivi par "jumps", on ignore les caractères entre
+```js
+// On a une correspondance si on a "quick brown" suivi par "jumps", on ignore les caractères entre
 // On garde en mémoire "brown" et "jumps"
 // On ignore la casse
 var re = /quick\s(brown).+?(jumps)/ig;
 var result = re.exec('The Quick Brown Fox Jumps Over The Lazy Dog');
-
+``` -

Le tableau suivant montre l'état résultant suite à ce script :

+Le tableau suivant montre l'état résultant suite à ce script : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ObjetPropriété/IndexDescriptionExemple
result[0]La chaîne complète des caractères qui correspondent."Quick Brown Fox Jumps"
[1], ...[n ]Les sous-chaînes correspondantes aux groupes capturants s'il y en a. Le nombre de groupes de parenthèses capturantes est illimité.result[1] === "Brown"
- result[2] === "Jumps"
indexL'indice (compté à partir de 0) de la correspondance dans la chaîne.4
inputLa chaîne de caractères utilisée en entrée."The Quick Brown Fox Jumps Over The Lazy Dog"
relastIndexL'indice à partir duquel chercher la prochaine correspondance. Lorsque le drapeau "g" est absent, cette propriété sera 0.25
ignoreCaseIndique si le drapeau "i" a été utilisé pour ignorer la casse.true
globalIndique si le drapeau "g" a été utilisé pour la correspondance globale.true
multilineIndique si le drapeau "m" a été utilisé pour chercher une correspondance sur plusieurs lignes.false
sourceLe texte du motif."quick\s(brown).+?(jumps)"
ObjetPropriété/IndexDescriptionExemple
result[0]La chaîne complète des caractères qui correspondent."Quick Brown Fox Jumps"
+ [1], ...[n ] + + Les sous-chaînes correspondantes aux groupes capturants s'il y en a. Le + nombre de groupes de parenthèses capturantes est illimité. + + result[1] === "Brown"
result[2] === "Jumps"
+
index + L'indice (compté à partir de 0) de la correspondance dans la chaîne. + 4
inputLa chaîne de caractères utilisée en entrée."The Quick Brown Fox Jumps Over The Lazy Dog"
relastIndex + L'indice à partir duquel chercher la prochaine correspondance. Lorsque + le drapeau "g" est absent, cette propriété 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
sourceLe texte du motif."quick\s(brown).+?(jumps)"
-

Exemples

+## Exemples -

Trouver des correspondances successives

+### Trouver des correspondances successives -

Si on utilise le drapeau "g" dans l'expression rationnelle, on peut utiliser la méthode exec() plusieurs fois afin de trouver les correspondances successives dans la chaîne. Lorsqu'on procède ainsi, la recherche reprend à la position indiquée par la propriété {{jsxref("RegExp.lastIndex", "lastIndex")}} ({{jsxref("RegExp.prototype.test()", "test()")}} fera également progresser la propriété {{jsxref("RegExp.lastIndex", "lastIndex")}}).

+Si on utilise le drapeau "`g`" dans l'expression rationnelle, on peut utiliser la méthode `exec()` plusieurs fois afin de trouver les correspondances successives dans la chaîne. Lorsqu'on procède ainsi, la recherche reprend à la position indiquée par la propriété {{jsxref("RegExp.lastIndex", "lastIndex")}} ({{jsxref("RegExp.prototype.test()", "test()")}} fera également progresser la propriété {{jsxref("RegExp.lastIndex", "lastIndex")}}). -

On notera que la propriété {{jsxref("RegExp.lastIndex", "lastIndex")}} ne sera pas réinitialisée lors de la recherche sur une autre chaîne de caractères, c'est la valeur existante de {{jsxref("RegExp.lastIndex", "lastIndex")}} qui sera utilisée.

+On notera que la propriété {{jsxref("RegExp.lastIndex", "lastIndex")}} ne sera pas réinitialisée lors de la recherche sur une autre chaîne de caractères, c'est la valeur existante de {{jsxref("RegExp.lastIndex", "lastIndex")}} qui sera utilisée. -

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

+Par exemple, si on utilise le fragment de code suivant : -
var maRegex = /ab*/g;
+```js
+var maRegex = /ab*/g;
 var str = 'abbcdefabh';
 var monTableau;
 while ((monTableau = maRegex.exec(str)) !== null) {
@@ -129,71 +147,42 @@ while ((monTableau = maRegex.exec(str)) !== null) {
   msg += 'Prochaine correspondance à partir de ' + maRegex.lastIndex;
   console.log(msg);
 }
-
+``` -

Le script affichera alors :

+Le script affichera alors : -
Trouvé abb. Prochaine correspondance à partir de 3
-Trouvé ab. Prochaine correspondance à partir de 9
-
+ Trouvé abb. Prochaine correspondance à partir de 3 + Trouvé ab. Prochaine correspondance à partir de 9 -
-

Attention : Il ne faut pas placer un littéral d'expression rationnelle (ou le constructeur {{jsxref("RegExp")}}) au sein de la condition while car cela créerait un boucle infinie s'il y a une correspondance car la propriété {{jsxref("RegExp.lastIndex", "lastIndex")}} serait redéfinie à chaque itération. Il faut également s'assurer que le drapeau global est défini sinon on aura également une boucle.

-
+> **Attention :** Il ne faut pas placer un littéral d'expression rationnelle (ou le constructeur {{jsxref("RegExp")}}) au sein de la condition `while` car cela créerait un boucle infinie s'il y a une correspondance car la propriété {{jsxref("RegExp.lastIndex", "lastIndex")}} serait redéfinie à chaque itération. Il faut également s'assurer que le drapeau global est défini sinon on aura également une boucle. -

Utiliser exec() avec des littéraux

+### Utiliser `exec()` avec des littéraux -

Il est aussi possible d'utiliser exec() sans créer d'objet {{jsxref("RegExp")}} explicite :

+Il est aussi possible d'utiliser `exec()` sans créer d'objet {{jsxref("RegExp")}} explicite : -
var matches = /(coucou \S+)/.exec('Ceci est un coucou monde !');
+```js
+var matches = /(coucou \S+)/.exec('Ceci est un coucou monde !');
 console.log(matches[1]);
-
- -

Cela affichera 'coucou monde !'.

- -

Spécifications

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES3')}}{{Spec2('ES3')}}Définition initiale. Implémentée avec JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.10.6.21', 'RegExp.exec')}}{{Spec2('ES5.1')}}
{{SpecName('ES6', '#sec-regexp.prototype.exec', 'RegExp.exec')}}{{Spec2('ES6')}}
{{SpecName('ESDraft', '#sec-regexp.prototype.exec', 'RegExp.exec')}}{{Spec2('ESDraft')}}
+``` + +Cela affichera 'coucou monde !'. + +## Spécifications + +| Spécification | État | Commentaires | +| -------------------------------------------------------------------------------------------- | ---------------------------- | ----------------------------------------------------- | +| {{SpecName('ES3')}} | {{Spec2('ES3')}} | Définition initiale. Implémentée avec JavaScript 1.2. | +| {{SpecName('ES5.1', '#sec-15.10.6.21', 'RegExp.exec')}} | {{Spec2('ES5.1')}} | | +| {{SpecName('ES6', '#sec-regexp.prototype.exec', 'RegExp.exec')}} | {{Spec2('ES6')}} | | +| {{SpecName('ESDraft', '#sec-regexp.prototype.exec', 'RegExp.exec')}} | {{Spec2('ESDraft')}} | | -

Compatibilité des navigateurs

+## Compatibilité des navigateurs -

{{Compat("javascript.builtins.RegExp.exec")}}

+{{Compat("javascript.builtins.RegExp.exec")}} -

Voir aussi

+## Voir aussi - +- Le chapitre sur [les expressions rationnelles](/fr/docs/Web/JavaScript/Guide/Expressions_régulières) du [Guide JavaScript](/fr/docs/Web/JavaScript/Guide) +- {{jsxref("RegExp")}} +- {{jsxref("String.prototype.match()")}} +- {{jsxref("String.prototype.matchAll()")}} -- cgit v1.2.3-54-g00ecf