8 janvier 2021

Limite de mot : \b

Une limite de mot \b teste une position, de la même manière que les ancres ^ et $.

Quand le moteur d’expression régulière (module qui implémente la recherche d’expressions régulières) trouve le motif \b, il vérifie si la position dans la chaine de caractères est une limite de mot.

Il y a trois positions possibles pour une limite de mot :

  • Au début de la chaîne de caractères, si le premier caractère est alphanumérique (ou un trait de soulignement), c’est-à-dire qu’il correspond au motif \w.
  • Entre deux caractères d’une chaîne, si seulement l’un des caractères correspond au motif \w, (alphanumérique ou trait de soulignement).
  • À la fin de la chaîne de caractères, si le dernier caractère correspond au motif \w.

Par exemple l’expression régulière \bJava\b sera trouvé dans Hello, Java!, où Java est un mot isolé, mais pas dans Hello, JavaScript!.

alert( "Hello, Java!".match(/\bJava\b/) ); // Java
alert( "Hello, JavaScript!".match(/\bJava\b/) ); // null

Dans la chaîne Hello, Java! les positions suivantes correspondent au motif \b:

Cette chaîne passe le test du motif \bHello\b, car :

  1. Le début de la chaîne passe le premier test \b.
  2. Puis trouve le mot Hello.
  3. Enfin le test \b est encore valide, comme nous sommes entre o et une virgule.

Donc le motif \bHello\b sera trouvé, mais pas \bHell\b (car il n’y a pas de limite de mot après l) ni Java!\b (car le point d’exclamation ne correspond pas au motif \w, il n’est donc pas suivi par une limite de mot).

alert( "Hello, Java!".match(/\bHello\b/) ); // Hello
alert( "Hello, Java!".match(/\bJava\b/) );  // Java
alert( "Hello, Java!".match(/\bHell\b/) );  // null (aucune correspondance)
alert( "Hello, Java!".match(/\bJava!\b/) ); // null (aucune correspondance)

La limite de mot \b ne s’utilise pas uniquement pour des mots, mais aussi pour les nombres.

Par exemple, le motif \b\d\d\b recherche un nombre isolé à deux chiffres. C’est-à-dire, qu’il cherche un nombre à deux chiffres entouré par des caractères qui ne correspondent pas au motif \w, comme des espaces, une ponctuation, un début ou une fin de chaîne.

alert( "1 23 456 78".match(/\b\d\d\b/g) ); // 23,78
alert( "12,34,56".match(/\b\d\d\b/g) ); // 12,34,56
La limite de mot \b ne fonctionne pas pour des alphabets non latin

Le test de limite de mot \b vérifie qu’il doit y avoir \w d’un côté de la position et "not \w" – de l’autre côté.

Comme \w signifie a-z(en minuscule ou majuscule), un chiffre ou un trait de soulignement, le test ne fonctionne pas pour d’autres caractères, p. ex. lettre cyrillique ou idéogramme.

Exercices

L’heure à un format : hours:minutes. Les heures et les minutes ont deux chiffres, comme 09:00.

Écrire une expression régulière pour trouver l’heure dans la chaîne de caractère : Breakfast at 09:00 in the room 123:456.

P.S. Dans cet exercice il n’y a pas besoin de vérifier la validité de l’heure, donc ici 25:99 peut être une correspondance valable.

P.P.S. L’expression régulière ne doit pas valider 123:456.

Réponse : \b\d\d:\d\d\b.

alert( "Breakfast at 09:00 in the room 123:456.".match( /\b\d\d:\d\d\b/ ) ); // 09:00
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…)