[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Guide/Regular_expressions/Assertions [Back]  [Original]

Assertions - 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

Assertions

Les assertions indiquent les conditions selon lesquelles il est possible d'avoir une correspondance (contenu situ avant la correspondance, situ aprs ou expressions conditionnelles).

Dans cet article

Types

Note : Le caractre ? peut galement tre utilis comme quantificateur.

Caractres Signification
x(?=y)

Correspond 'x' seulement s'il est suivi de 'y'. On appelle cela un test de succession (lookahead).

Ainsi, /Jack(?=Sparrow)/ correspond 'Jack' seulement s'il est suivi de 'Sparrow'. /Jack(?=Sparrow|Bauer)/ correspond 'Jack' seulement s'il est suivi de 'Sparrow' ou de 'Bauer'. Cependant, ni 'Sparrow' ni 'Bauer' ne feront partie de la correspondance.

x(?!y)

Correspond 'x' seulement si 'x' n'est pas suivi de 'y'.

Ainsi, /\d+(?!\.)/ correspond un nombre qui n'est pas suivi par un point, cette expression utilise avec la chane 3.141 correspondra pour '141' mais pas pour '3.141'.

(?<=y)x

Correspond x seulement si x est prcd par y. C'est ce qu'on appelle une recherche arrire (lookbehind).

Ainsi /(?<=Jack)Sprat/ correspond "Sprat" seulement s'il est prcd de "Jack".
/(?<=Jack|Tom)Sprat/ correspond "Sprat" seulement s'il est prcd de "Jack" ou "Tom".
Toutefois, "Jack" et "Tom" ne feront pas partie de la correspondance.

(?<!y)x

Correspond x uniquement si x n'est pas prcd par y (parfois appele en anglais negated lookbehind).

Ainsi, /(?<!-)\d+/ correspondra un nombre seulement si celui-ci n'est pas prcd d'un signe moins.
/(?<!-)\d+/.exec('3') cible "3".
/(?<!-)\d+/.exec('-3') ne trouve aucune correspondance car le nombre est prcd d'un signe

Exemples

Assertion avant (lookahead)

js
let regex = /Premier(?= test)/g;

console.log("Premier test".match(regex)); // [ 'Premier' ]
console.log("Premier truc".match(regex)); // null
console.log("Voici le Premier test de l'anne.".match(regex)); // [ 'Premier' ]
console.log("Voici le Premier truc du mois.".match(regex)); // null

Assertion avant ngative

L'expression rationnelle /\d+(?!\.)/ permettra de rechercher plusieurs chiffres si ceux-ci ne sont pas suivis d'un point dcimal. Ainsi, /\d+(?!\.)/.exec('3.141') trouvera la sous-chane "141" mais pas "3."

js
console.log(/\d+(?!\.)/g.exec("3.141")); // [ '141', index: 2, input: '3.141' ]

Signification diffrente de '?!' entre les assertions et les intervalles

La combinaison de caractres ?! a un sens diffrent entre les assertions /x(?!y)/ et les intervalles [^?!].

js
let orangePasCitron =
  "Voulez-vous avoir une orange? Oui, je ne veux pas avoir de citron!";

let choixPasCitron = /[^?!]+avoir(?! un citron)[^?!]+[?!]/gi;
console.log(orangePasCitron.match(choixPasCitron)); // [ 'Voulez-vous avoir une orange?' ]

let choixPasOrange = /[^?!]+avoir(?! une orange)[^?!]+[?!]/gi;
console.log(orangePasCitron.match(choixPasOrange)); // [ 'Oui, je ne veux pas avoir de citron!' ]

Assertion arrire (lookbehind)

js
let oranges = ["espce orange A ", "sorte orange B", "espce orange C"];

let especesOranges = oranges.filter((fruit) =>
  fruit.match(/(?<=espce )orange/),
);
console.log(especesOranges); // [ 'espce orange A ', 'espce orange C' ]

Web Proxy Viewer  |  New URL  |  Original Page