| [ 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() 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().
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()).
regexObj.exec(chane);
chaneLa chane de caractres dans laquelle on recherche la correspondance dcrite par l'expression rationnelle.
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.
Si on a l'exemple suivant :
// 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"
|
|
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)" |
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 :
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.
exec() avec des littrauxIl est aussi possible d'utiliser exec() sans crer d'objet RegExp explicite :
var matches = /(coucou \S+)/.exec("Ceci est un coucou monde !");
console.log(matches[1]);
Cela affichera 'coucou monde !'.
| Spcification |
|---|
| ECMAScript 2027 LanguageSpecification # sec-regexp.prototype.exec |
RegExpString.prototype.match()String.prototype.matchAll()Cette page a t modifie le 17 fvr. 2025 par les contributeurices du MDN.
RegExpObject/FunctionObject.prototype.__defineGetter__()Object.prototype.__defineSetter__()Object.prototype.__lookupGetter__()Object.prototype.__lookupSetter__()Object.prototype.hasOwnProperty()Object.prototype.isPrototypeOf()Object.prototype.propertyIsEnumerable()Object.prototype.toLocaleString()Object.prototype.toString()Object.prototype.valueOf()Certaines 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 |