Quels sont les limites non-mot dans regex (\ B), par rapport à mot-frontière?
-
13-10-2019 - |
Question
Quels sont les limites non-mot dans regex (\ B), par rapport à mot-frontière?
La solution
Une limite de mot (\b
) est d'une largeur de zéro qui peut correspondre:
- Entre un caractère de mot (
\w
) et un caractère non-mot (\W
) ou - Entre un caractère de mot et le début ou la fin de la chaîne.
Dans la définition Javascript de \w
est [A-Za-z0-9_]
et \W
est autre chose.
La version Négation de \b
, \B
écrit, est un match de largeur zéro lorsque le ci-dessus pas attente. Par conséquent, il peut correspondre à:
- Entre deux caractères de mot.
- Entre deux caractères non-mot.
- Entre un caractère non-mot et le début ou la fin de la chaîne.
- La chaîne vide.
Par exemple, si la chaîne est alors "Hello, world!"
matchs \b
dans les endroits suivants:
H e l l o , w o r l d !
^ ^ ^ ^
Et \B
correspond à ces endroits où \b
ne correspond pas à:
H e l l o , w o r l d !
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
Autres conseils
L'objectif fondamental de non-word-boundary
est de créer une regex qui dit:
-
si nous sommes au début / fin d'une
word char
(\w
=[a-zA-Z0-9_]
) assurez-vous que le caractère précédent / suivant est aussi unword char
,.:
"a\B."
~ par exemple"a\w"
:"ab"
,"a4"
,"a_"
, ... mais pas"a "
,"a."
-
si nous sommes au début / fin d'une
non-word char
(\W
=[^a-zA-Z0-9_]
) assurez-vous que le caractère précédent / suivant est aussi unnon-word char
,.:
"-\B."
~ par exemple"-\W"
:"-."
,"- "
,"--"
, ... mais pas"-a"
,"-1"
Pour word-boundary
il est similaire, mais au lieu de faire en sorte que les caractères adjacents sont de la même classe (word char
/ non-word car
) dont ils ont besoin d'être différent, d'où le nom word's boundary
.