Assertions
Brouillon
Cette page n'est pas terminée.
Les assertions indiquent les conditions selon lesquelles il est possible d'avoir une correspondance (contenu situé avant la correspondance, situé après ou expressions conditionnelles).
Types
Note : Le caractère ?
peut également être utilisé comme quantificateur.
Caractères | Signification |
---|---|
x(?=y) |
Correspond à 'x' seulement s'il est suivi de 'y'. On appelle cela un test de succession (lookahead). Ainsi, |
x(?!y) |
Correspond à 'x' seulement si 'x' n'est pas suivi de 'y'. Ainsi, |
(?<=y)x |
Correspond à Ainsi / |
(?<!y)x |
Correspond à Ainsi, |
Exemples
Assertion avant (lookahead)
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'année.".match(regex)); // [ 'Premier' ]
console.log('Voici le Premier truc du mois.'.match(regex)); // null
Assertion avant négative
L'expression rationnelle /\d+(?!\.)/
permettra de rechercher plusieurs chiffres si ceux-ci ne sont pas suivis d'un point décimal. Ainsi, /\d+(?!\.)/.exec('3.141')
trouvera la sous-chaîne "141" mais pas "3."
console.log(/\d+(?!\.)/g.exec('3.141')); // [ '141', index: 2, input: '3.141' ]
Signification différente de '?!'
entre les assertions et les intervalles
La combinaison de caractères ?!
a un sens différent entre les assertions /x(?!y)/
et les intervalles [^?!]
.
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 arrière (lookbehind)
let oranges = ['espèce orange A ', 'sorte orange B', 'espèce orange C',];
let especesOranges = oranges.filter( fruit => fruit.match(/(?<=espèce )orange/));
console.log(especesOranges); // [ 'espèce orange A ', 'espèce orange C' ]