Cette page a été traduite à partir de l'anglais par la communauté.Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
RegExp.prototype.exec()
Baseline Widely available
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 méthodeexec() exécute la recherche d'une correspondance sur une chaîne de caractères donnée. Elle renvoie un tableau contenant les résultats ounull.
Si on souhaite uniquement savoir s'il y a une correspondance, on utilisera la méthodeRegExp.prototype.test() ou la méthodeString.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 représentant des expressions rationnelles gardent un état en mémoire lorsqu'ils utilisent les marqueursglobal ousticky et ils gardent notamment en mémoirelastIndex à 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 àString.prototype.match()).
Syntaxe
regexObj.exec(chaîne);Paramètres
chaîneLa chaîne de caractères dans laquelle on recherche la correspondance décrite par l'expression rationnelle.
Valeur de retour
S'il y a une correspondance, la méthodeexec() renvoie un tableau (contenant des éléments et deux propriétésindex etvalues, cf. ci-après) et met à jour les propriétés de l'objet représentant l'expression rationnelle (notammentlastIndex). 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.
S'il n'y a aucune correspondance, la méthodeexec() renvoienull et la propriétélastIndex reçoit la valeur 0.
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// On garde en mémoire "brown" et "jumps"// On ignore la cassevar 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 résultant suite à ce script :
| Objet | Propriété/Index | Description | Exemple |
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" | |
index | L'indice (compté à partir de 0) de la correspondance dans la chaîne. | 4 | |
input | La chaîne de caractères utilisée en entrée. | "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 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 | |
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 méthodeexec() 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élastIndex (test() fera également progresser la propriétélastIndex).
On notera que la propriétélastIndex ne sera pas réinitialisée lors de la recherche sur une autre chaîne de caractères, c'est la valeur existante delastIndex qui sera utilisée.
Par exemple, si on utilise le fragment de code suivant :
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 3Trouvé ab. Prochaine correspondance à partir de 9
Attention :Il ne faut pas placer un littéral d'expression rationnelle (ou le constructeurRegExp) au sein de la conditionwhile car cela créerait un boucle infinie s'il y a une correspondance car la propriété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.
Utiliserexec() avec des littéraux
Il est aussi possible d'utiliserexec() sans créer d'objetRegExp explicite :
var matches = /(coucou \S+)/.exec("Ceci est un coucou monde !");console.log(matches[1]);Cela affichera 'coucou monde !'.
Spécifications
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-regexp.prototype.exec> |