9 mai 2020

Ancres : début ^ et fin $ d'une chaîne de caractères

L’accent circonflexe ^ et le signe dollar $ ont une signification particulière dans une regexp. Ils sont appelés “ancres”.

L’accent circonflexe ^ correspond au début du texte, et le signe dollar $ – à la fin.

Par exemple, testons si le texte commence par Mary:

let str1 = "Mary had a little lamb";
alert( /^Mary/.test(str1) ); // true

Le paterne ^Mary signifie : “le texte commence puis Mary”.

Similairement, nous pouvons vérifier si le texte termine par snow en utilisant snow$:

let str1 = "it's fleece was white as snow";
alert( /snow$/.test(str1) ); // true

In these particular cases we could use string methods startsWith/endsWith instead. Regular expressions should be used for more complex tests.

Test pour une correspondance complète

Les deux ancres mises ensemble ^...$ pour vérifier si une chaîne de caractères correspond entièrement à un paterne. Par exemple, pour vérifier si l’entrée de l’utilisateur est dans le bon format.

Vérifions si une chaîne de caractères est une heure au format 12:34. En résumé : deux nombres, puis deux points, et enfin deux autres nombres.

Dans le langage des expressions régulières, c’est \d\d:\d\d:

let goodInput = "12:34";
let badInput = "12:345";

let regexp = /^\d\d:\d\d$/;
alert( regexp.test(goodInput) ); // true
alert( regexp.test(badInput) ); // false

Ici, la correspondance pour \d\d:\d\d doit commencer juste après le début du texte ^, et la fin $ doit immédiatement suivre.

La chaîne entière doit être dans ce format. S’il y a la moindre déviation ou le moindre caractère de trop, le résultat sera false.

Les ancres agissent différemment si le marqueur m est présent. Nous verrons cela dans le prochain article.

Les ancres n’ont “aucune longueur”

Les ancres ^ et $ sont des tests. Elles n’ont aucune longueur.

En d’autres termes, elles ne vérifient pas un caractère, mais forcent plutôt le moteur à vérifier une condition (le texte commence/termine).

Exercices

Quelle chaîne de caractères correspond à ^$ ?

Une chaîne de caractères vide est la seule correspondance : elle commence et se termine aussitôt.

Cette tâche montre à nouveau que les ancres ne sont pas des caractères, mais des tests.

La chaîne de caractères est vide "". Le moteur regarde en premier ^ (début de l’entrée), ça correspond, et immédiatement après la fin $, ça correspond également. Donc il y a une correspondance.

Carte du tutoriel

Commentaires

lire ceci avant de commenter…
  • Si vous avez des améliorations à suggérer, merci de soumettre une issue GitHub ou une pull request au lieu de commenter.
  • Si vous ne comprenez pas quelque chose dans l'article, merci de préciser.
  • Pour insérer quelques bouts de code, utilisez la balise <code>, pour plusieurs lignes – enveloppez-les avec la balise <pre>, pour plus de 10 lignes - utilisez une sandbox (plnkr, jsbin, codepen…)