| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec | [Back] [Original] |
Get to know MDN better
Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.
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() des instances de RegExp excute une recherche avec cette expression rationnelle pour trouver une correspondance dans une chane de caractres dfinie et retourne un tableau de rsultats, ou null.
const regex = /fo+/g;
const str = "table football, foosball";
let array;
while ((array = regex.exec(str)) !== null) {
console.log(
`Trouv ${array[0]}. Prochaine recherche partir de ${regex.lastIndex}.`,
);
// Rsultat attendu : "Trouv foo. Prochaine recherche partir de 9."
// Rsultat attendu : "Trouv foo. Prochaine recherche partir de 19."
}
exec(str)
strLa chane de caractres contre laquelle faire correspondre l'expression rationnelle. Toutes les valeurs sont converties en chanes de caractres, donc l'omission de ce paramtre ou le passage de undefined entrane la recherche de la chane de caractres "undefined" par exec(), ce qui est rarement souhait.
Si la correspondance choue, la mthode exec() retourne null, et met la proprit lastIndex de l'expression rationnelle 0.
Si la correspondance russit, la mthode exec() retourne un tableau et met jour la proprit lastIndex de l'objet expression rationnelle. Le tableau retourn a le texte correspondant comme premier lment, puis un lment pour chaque groupe capturant du texte correspondant. Le tableau a galement les proprits supplmentaires suivantes :
indexL'index bas sur 0 de la correspondance dans la chane de caractres.
inputLa chane de caractres originale contre laquelle la correspondance a t effectue.
groupsUn objet dont le prototype est null contenant les groupes nomms capturant, avec leurs noms comme cls et les groupes capturant comme valeurs, ou undefined si aucun groupe capturant nomm n'est dfini. Consultez les groupes capturant pour plus d'informations.
indices FacultatifCette proprit est prsente uniquement lorsque l'indicateur d est dfini. Il s'agit d'un tableau o chaque entre reprsente les limites d'une correspondance de sous-chane de caractres. L'indice de chaque lment de ce tableau correspond l'indice de la sous-chane de caractres correspondante dans le tableau retourn par exec(). Autrement dit, la premire entre de indices reprsente la correspondance entire, la deuxime reprsente le premier groupe capturant, etc. Chaque entre est elle-mme un tableau de deux lments, dont le premier nombre reprsente l'indice de dbut de la correspondance et le second, son indice de fin.
Le tableau indices possde galement une proprit groups, qui contient un objet dont le prototype est null regroupant tous les groupes nomms capturant. Les cls sont les noms des groupes capturant et chaque valeur est un tableau de deux lments, dont le premier nombre correspond l'indice de dbut et le second l'indice de fin du groupe capturant. Si l'expression rationnelle ne contient aucun groupe capturant nomm, groups vaut undefined.
Les objets JavaScript RegExp conservent un tat lorsque l'indicateur global ou l'indicateur d'adhrence est dfini (par exemple, /foo/g ou /foo/y). Ils stockent dans lastIndex la position de la correspondance prcdente. Ce mcanisme interne permet exec() d'itrer sur plusieurs correspondances dans une chane de caractres (avec des groupes capturant), au lieu de rcuprer uniquement les chanes de caractres correspondantes avec String.prototype.match().
Lorsque vous utilisez exec(), l'indicateur global n'a aucun effet si l'indicateur d'adhrence est dfini la correspondance est toujours adhrente.
exec() est la mthode primitive des expressions rationnelles. De nombreuses autres mthodes d'expression rationnelle appellent exec() en interne y compris celles appeles par les mthodes de chanes de caractres, comme [Symbol.replace](). Bien que exec() soit puissant (et soit la mthode la plus efficace), il n'exprime souvent pas l'intention avec le plus de clart.
RegExp.prototype.test() la place.String.prototype.match() la place. De plus, String.prototype.matchAll() facilite la recherche de plusieurs parties d'une chane de caractres (avec des groupes capturant) en vous permettant d'itrer sur les correspondances.String.prototype.search().exec() est utile pour les oprations complexes qui ne peuvent pas tre facilement ralises au moyen des mthodes ci-dessus, souvent lorsque vous devez ajuster manuellement lastIndex. (String.prototype.matchAll() copie l'expression rationnelle, donc modifier lastIndex pendant l'itration sur matchAll n'a aucun effet sur l'itration.) Pour un exemple de ce type, voir le recul de lastIndex.
exec()Considrons l'exemple suivant :
// Correspond "quick brown" suivi de "jumps", en ignorant les caractres intermdiaires
// Se souvient de "brown" et "jumps"
// Ignore la casse
const re = /quick\s(?<color>brown).+?(jumps)/dgi;
const resultat = re.exec("The Quick Brown Fox Jumps Over The Lazy Dog");
Le tableau suivant montre l'tat de resultat aprs l'excution de ce script :
| Proprit | Valeur |
|---|---|
[0] |
"Quick Brown Fox Jumps" |
[1] |
"Brown" |
[2] |
"Jumps" |
index |
4 |
indices |
[[4, 25], [10, 15], [20, 25]]groups: { color: [10, 15 ]} |
input |
"The Quick Brown Fox Jumps Over The Lazy Dog" |
groups |
{ color: "Brown" } |
De plus, re.lastIndex est dfini sur 25, car cette expression rationnelle est globale.
Si votre expression rationnelle utilise l'indicateur g, vous pouvez utiliser plusieurs fois la mthode exec() pour trouver des correspondances successives dans la mme chane de caractres. Dans ce cas, la recherche commence dans la sous-chane de caractres de chaine dfinie par la proprit lastIndex de l'expression rationnelle (test() fait galement avancer la proprit lastIndex). Notez que la proprit lastIndex n'est pas rinitialise lorsque vous recherchez une chane de caractres diffrente, et que la recherche commence sa valeur actuelle lastIndex.
Par exemple, supposons que vous ayez le script suivant :
const monRe = /ab*/g;
const chaine = "abbcdefabh";
let monTableau;
while ((monTableau = monRe.exec(chaine)) !== null) {
let msg = `Trouv ${monTableau[0]}. `;
msg += `Le prochain rsultat commence ${monRe.lastIndex}`;
console.log(msg);
}
Ce script affiche le texte suivant :
Trouv abb. Le prochain rsultat commence 3 Trouv ab. Le prochain rsultat commence 9
Attention : De nombreux piges peuvent provoquer une boucle infinie !
RegExp) dans la condition while cela recre l'expression rationnelle chaque itration et rinitialise lastIndex.g) est dfini, sinon lastIndex n'avance jamais./^/gm), incrmentez manuellement lastIndex chaque fois pour viter de rester bloqu au mme endroit.Vous pouvez gnralement remplacer ce type de code par String.prototype.matchAll() pour rduire le risque d'erreur.
exec() avec des littraux d'expression rationnelleVous pouvez galement utiliser exec() sans crer explicitement un objet RegExp :
const correspondances = /(bonjour \S+)/.exec("Ceci est un bonjour monde !");
console.log(correspondances[1]);
Cela affiche un message contenant 'bonjour monde !'.
| Spcification |
|---|
| ECMAScript 2027 LanguageSpecification # sec-regexp.prototype.exec |
RegExpCette page a t modifie le 11 oct. 2026 par les contributeurices du MDN.
RegExpObject/FunctionCertaines parties de ce contenu sont protges par le droit d'auteur 19982026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.
| Web Proxy Viewer | New URL | Original Page |