Délimiteur de mot JavaScript (\b) dans les expressions régulières
En JavaScript, l'ancre \b dans les expressions régulières correspond aux délimiteurs de mots, entre un caractère de mot (\w) et un non-mot.
Introduction aux délimiteurs de mots
En JavaScript, dans les expressions régulières, l'ancre \b est utilisée pour correspondre aux délimiteurs de mots. Un délimiteur de mot est une position entre un caractère de mot (défini par la classe de caractères \w, qui inclut [a-zA-Z0-9_]) et un caractère non-mot (tout ce qui n'est pas un caractère de mot). Cela permet une correspondance précise de mots entiers et s'avère particulièrement utile pour des tâches telles que la recherche, le remplacement ou la validation de modèles de mots spécifiques dans un texte.
\b est l'une des ancres des expressions régulières. Contrairement aux ancres de début et de fin de chaîne ^ et $, qui ancrent une correspondance aux extrémités de la saisie, \b l'ancre aux extrémités d'un mot — un seul modèle peut ainsi correspondre à des mots entiers n'importe où dans une chaîne.
Ce chapitre couvre ce qui constitue un délimiteur de mot, le fonctionnement de l'ancre opposée \B, la nature à largeur nulle des deux, les modèles courants de correspondance de mots entiers, et les limitations rencontrées avec du texte Unicode.
Utilisation de l'ancre \b
L'ancre \b est une assertion à largeur nulle : elle correspond à une position, pas à un caractère. La position doit se situer entre un caractère de mot (qu'il appartient à \w : [a-zA-Z0-9_]) et un caractère non-mot — ou entre un caractère de mot et le tout début ou la toute fin de la chaîne. Comme elle est à largeur nulle, \b ne consomme rien ; elle contraint seulement l'endroit où le reste du modèle est autorisé à correspondre.
Il existe trois emplacements où un délimiteur de mot se produit :
- Avant le premier caractère, si ce caractère est un caractère de mot.
- Après le dernier caractère, si ce caractère est un caractère de mot.
- Entre deux caractères adjacents dont exactement l'un est un caractère de mot.
L'ancre complémentaire \B correspond à chaque position qui n'est pas un délimiteur de mot.
Pour voir où les délimiteurs se situent réellement, insérez un marqueur à chaque position \b :
Explication : Les quatre délimiteurs sont : avant a, après c (à côté de l'espace), avant d, et après f (fin de chaîne). Le passage espace-vers-espace n'a pas de délimiteur car aucun des deux côtés n'est un caractère de mot.
Exemple : Correspondance de mots entiers
Explication :
- L'expression régulière
/\bcat\b/correspond au mot "cat" en tant que mot entier. - Dans la chaîne
'The cat is here.', "cat" est un mot séparé, donc la correspondance esttrue. - Dans la chaîne
'The caterpillar is here.', "cat" fait partie du mot "caterpillar", donc la correspondance estfalse.
Exemple : Recherche de mots entiers dans un texte
Explication :
- L'expression régulière
/\bcat\b/gtrouve toutes les occurrences de "cat" en tant que mot entier dans le texte. - Elle ne correspond qu'à "cat", et non à "scatter", "caterpillar" ou "catfish", car "cat" n'est pas un mot séparé dans ces contextes.
- Le résultat est un array contenant
["cat"].
Délimiteurs de non-mots (\B)
\B est l'exact opposé de \b : il correspond à toute position qui n'est pas un délimiteur de mot. Cela signifie qu'il réussit au milieu d'un mot (entre deux caractères de mot) ou entre deux caractères non-mots, et échoue là où \b réussirait.
Utilisez \B lorsque vous souhaitez faire correspondre un modèle uniquement lorsqu'il est intégré à l'intérieur d'un mot plus grand.
Explication :
/\Boo\B/gexige un non-délimiteur des deux côtés deoo.- Dans
'noon', leooandes deux côtés, donc les deux assertions\Bsont vérifiées — il y a correspondance. - Dans
'zoo', leoose trouve à la fin du mot, donc un vrai délimiteur de mot est présent et\Béchoue. Seul leoode'noon'est retourné.
Un moyen pratique de retenir la relation : en chaque position, exactement l'un de \b et \B correspond.
Applications pratiques
Validation de champs de saisie
Les délimiteurs de mots peuvent être utiles pour valider des champs de saisie où des correspondances de mots exactes sont requises.
Explication :
- L'expression régulière
/^\w+$/garantit que la saisie est un seul mot sans espaces. ^affirme le début de la chaîne, et$affirme la fin. Comme\wne correspond qu'aux caractères de mot,^et$appliquent implicitement des délimiteurs de mots, rendant\bredondant ici.\w+correspond à un ou plusieurs caractères de mot (y compris les lettres, les chiffres et les underscores).'user123'correspond car c'est un seul mot sans espaces.'user 123'ne correspond pas car il contient un espace, qui interrompt la séquence de caractères de mot.- Notez que
\winclut les underscores, ce qui peut affecter la logique de validation si vous souhaitez les exclure.
Extraction de mots d'une phrase
Vous pouvez extraire des mots spécifiques d'une phrase à l'aide de délimiteurs de mots.
Explication :
- Le modèle d'expression régulière
/\btest\w*\b/gicorrespond à tout mot commençant par "test". - Le drapeau
ggarantit que toutes les correspondances dans la chaîne sont retournées. - Le drapeau
igarantit que la correspondance est insensible à la casse, de sorte qu'elle correspond à la fois à "test" et à "Testing". - Le résultat est
["test", "Testing"], car les deux mots commencent par "test" et sont suivis de zéro ou plusieurs caractères de mot.
Combinaison des délimiteurs de mots avec d'autres modèles
Les délimiteurs de mots peuvent être combinés avec d'autres modèles d'expressions régulières pour des correspondances plus complexes.
Exemple : Recherche de mots avec un préfixe
Explication :
- L'expression régulière
/\bpre\w*\b/gcorrespond aux mots commençant par le préfixe "pre". \bpreaffirme un délimiteur de mot suivi de "pre".\w*correspond à zéro ou plusieurs caractères de mot.\baffirme un délimiteur de mot à la fin.- Le résultat est un array contenant
["preheat", "prefix", "prepare", "pressure"].
Exemple : Recherche de mots avec un suffixe spécifique
Explication :
- L'expression régulière
/\w+ing\b/gcorrespond aux mots se terminant par "ing". \w+correspond à un ou plusieurs caractères de mot.ing\bcorrespond à "ing" suivi d'un délimiteur de mot.- Le résultat est un array contenant
["running", "walking", "talking", "thinking"].
Lorsque vous avez besoin de faire correspondre des mots entiers ou de vous assurer que des mots ne font pas partie de chaînes plus grandes, utilisez l'ancre \b pour définir précisément les délimiteurs de mots
Utiliser \b pour une correspondance précise de mots
Explication :
- L'expression régulière
/\bdog\b/gcorrespond au mot "dog" en tant que mot entier. - Elle ne correspond pas à "dogs" car "dog" n'est pas un mot séparé dans ce contexte.
- Le résultat est un array contenant
["dog"].
Exemple : Correspondance de nombres entiers
Les chiffres étant des caractères de mot, \b fonctionne aussi sur les nombres — utile pour extraire des entiers d'un texte mixte sans scinder sur un point décimal.
Explication :
/\b\d+\b/gcorrespond aux suites de chiffres isolées entre des caractères non-chiffres.3.14est découpé en"3"et"14"car le.est un caractère non-mot, donc un délimiteur de mot se trouve de chaque côté de lui.
Limitations avec Unicode
L'ancre \b est définie uniquement en termes de l'ensemble ASCII \w ([a-zA-Z0-9_]). Les lettres avec des signes diacritiques ou les caractères d'écritures non-latines sont traités comme des caractères non-mots, de sorte qu'un délimiteur apparaît à des endroits inattendus.
Explication :
éne fait pas partie de\w, donc le moteur voit un délimiteur de mot entrecafeté.- Le
\bfinal aprèsés'attend à ce queésoit un caractère de mot — ce qu'il n'est pas — donc l'assertion entière échoue même si le texte contient clairement le mot "café".
JavaScript ne fournit pas de version de \b adaptée à Unicode (les drapeaux u et v n'en modifient pas la définition). Si vous avez besoin de faire correspondre des mots accentués ou non-latins en tant que mots entiers, construisez vos propres délimiteurs à partir d'une classe de caractères explicite, par exemple :
Explication :
\p{L}(activé par le drapeauu) correspond à toute lettre Unicode.- Le lookbehind
(?<![\p{L}])et le lookahead(?![\p{L}])recréent un délimiteur tenant compte des lettres, de sorte quecafécorrespond mais pascafés. - Il s'agit de la solution de contournement standard lorsque
\bASCII est trop restrictif pour votre alphabet.
Conclusion
L'ancre \b dans les expressions régulières JavaScript est un outil puissant pour faire correspondre des délimiteurs de mots. En utilisant cette ancre, vous pouvez créer des modèles précis et efficaces pour rechercher, remplacer et valider des mots dans un texte. Que vous travailliez sur des fonctionnalités de recherche, la validation de données ou le traitement de texte, comprendre et utiliser les délimiteurs de mots peut considérablement améliorer vos capacités en matière d'expressions régulières.