Je lis un livre sur l'expression régulière et je suis tombé sur cet exemple pour \b
:
Le chat dispersa sa nourriture dans toute la pièce.
Utilisation de regex - \bcat\b
correspondra au mot cat
mais pas au cat
in scattered
.
Pour \B
l'auteur utilise l'exemple suivant:
Veuillez saisir l'identifiant à neuf chiffres tel qu'il
apparaît sur votre mot de passe codé par couleur.
Utilisation de \B-\B
correspondances regex -
entre les mots color - coded
. L'utilisation \b-\b
d'autre part correspond aux -
in nine-digit
et pass-key
.
Comment se fait-il dans le premier exemple que nous utilisons \b
pour séparer cat
et dans le second \B
pour séparer -
? Utiliser \b
dans le deuxième exemple fait le contraire de ce qu'il a fait précédemment.
Veuillez m'expliquer la différence.
EDIT: Aussi, quelqu'un peut-il expliquer s'il vous plaît avec un nouvel exemple?
-
n'est pas considéré comme faisant partie d'un mot. De même,!
ne fait pas partie d'un mot. Donc à nouveau\b!\b
correspond à "uunet! Iamold", mais pas à "Wow! You are". Vous pouvez essayer ce truc sur regexpal.com .\B matches the empty string not at the beginning or end of a word
\b
est une limite de mot de largeur nulle. Plus précisément:Exemple:
.\b
correspondc
àabc
\B
est une limite sans mot de largeur nulle. Plus précisément:Exemple:
\B.\B
correspondb
àabc
Voir regular-expressions.info pour plus d'informations sur les regex
la source
string.match()
renvoie uniquement la première correspondance, sauf si vous ajoutez l' indicateur globalg
:"abc def".match(/\b./g)
renvoie['a', ' ', 'd']
Avec un autre exemple:
Considérez ceci est la chaîne et le modèle à rechercher est 'cat':
text = "catmania thiscat thiscatmaina";
Maintenant les définitions,
'\ b' trouve / correspond au modèle au début ou à la fin de chaque mot.
«\ B» ne trouve pas / ne correspond pas au motif au début ou à la fin de chaque mot.
Différents cas:
Cas 1: au début de chaque mot
result = text.replace(/\bcat/g, "ct");
Maintenant, le résultat est "ctmania thiscat thiscatmaina"
Cas 2: à la fin de chaque mot
result = text.replace(/cat\b/g, "ct");
Maintenant, le résultat est "catmania thisct thiscatmaina"
Cas 3: pas au début
result = text.replace(/\Bcat/g, "ct");
Maintenant, le résultat est "catmania thisct thisctmaina"
Cas 4: pas à la fin
result = text.replace(/cat\B/g, "ct");
Maintenant, le résultat est "ctmania thiscat thisctmaina"
Cas 5: ni début ni fin
result = text.replace(/\Bcat\B/g, "ct");
Maintenant, le résultat est "catmania thiscat thisctmaina"
J'espère que cela t'aides :)
la source
Le métacaractère \ b est une ancre comme le signe curseur et le signe dollar. Il correspond à une position appelée «limite de mot». Cette correspondance est de longueur nulle.
Il existe trois positions différentes qui peuvent être qualifiées de limites de mots:
\ B est la version annulée de \ b . \ B correspond à chaque position où \ b ne le fait pas. En effet, \ B correspond à n'importe quelle position entre deux caractères de mot ainsi qu'à n'importe quelle position entre deux caractères non mot.
Source: http://www.regular-expressions.info/wordboundaries.html
la source
\b
correspond à une limite de mot.\B
correspond à des limites sans mots, et équivaut à (merci à @Alan Moore pour la correction!) . Les deux sont de largeur nulle.[^\b]
(?!\b)
Voir http://www.regular-expressions.info/wordboundaries.html pour plus de détails. Le site est extrêmement utile pour de nombreuses questions de base sur les regex.
la source
\B
n'est pas équivalent à[^\b]
. Une classe de caractères ([...]
ou[^...]
) consomme exactement un caractère, tandis que les assertions de largeur nulle aiment\b
et\B
ne consomment rien. Si vous mettez\b
dans une classe de caractères, cela prend une signification complètement différente:[\b]
correspond à un retour arrière et[^\b]
correspond à n'importe quel caractère sauf un retour arrière.\B
est vraiment équivalent à(?!\b)
.Prenons une chaîne comme:
Remarque: le trait de soulignement (_) n'est pas considéré comme un caractère spécial dans ce cas.
/\bX\b/g
Doit commencer et se terminer par un caractère spécial ou un espace blanc/\bX/g
Doit commencer par un caractère spécial ou un espace blanc/X\b/g
Doit se terminer par un caractère spécial ou un espace blanc/\BX\B/g
Ne doit pas commencer et ne pas se terminer par un caractère spécial ou un espace blanc
/\BX/g
Ne doit pas commencer par un caractère spécial ou un espace blanc/X\B/g
Ne devrait pas terminer par un caractère spécial ou un espace blanc/\bX\B/g
Devrait commencer et non terminer par un caractère spécial ou un espace blanc/\BX\b/g
Devrait pas commencer et doit se terminer par un caractère spécial ou un espace blancla source
Source © Copyright RexEgg.com
Limite de mot: \ b *
La limite de mot \ b correspond aux positions où un côté est un caractère de mot (généralement une lettre, un chiffre ou un trait de soulignement - mais voir ci-dessous pour les variations entre les moteurs) et l'autre côté n'est pas un caractère de mot (par exemple, il peut être le début de la chaîne ou un espace).
Le regex \ bcat \ b correspondrait donc à cat dans un chat noir, mais il ne correspondrait pas à catatonic, tomcat ou certificate. En supprimant l'une des limites, \ bcat correspondrait au chat dans le poisson-chat, et cat \ b correspondrait au chat dans le chat, mais pas l'inverse. Les deux, bien sûr, correspondraient au chat tout seul.
Limite de pas-un-mot: \ B
\ B correspond à toutes les positions où \ b ne correspond pas. Par conséquent, il correspond:
✽ Lorsqu'aucun côté n'est un caractère de mot, par exemple à n'importe quelle position dans la chaîne $ = (@ -% ++) (y compris le début et la fin de la chaîne)
✽ Lorsque les deux côtés sont un caractère de mot, par exemple entre le H et le i dans Hi!
Cela peut ne pas sembler très utile, mais parfois \ B est exactement ce que vous voulez. Par exemple,
✽ \ Bcat \ B trouvera chat entièrement entouré de caractères de mots, comme dans le certificat, mais ni seul, ni au début ou à la fin des mots.
✽ cat \ B trouvera chat à la fois dans le certificat et le poisson-chat, mais ni dans tomcat ni seul.
✽ \ Bcat trouvera chat à la fois dans le certificat et dans le chat, mais ni dans le poisson-chat ni seul.
✽ \ Bcat | cat \ B trouvera chat dans une situation embarquée, par exemple dans un certificat, un poisson-chat ou un chat, mais pas seul.
la source
\ b est utilisé comme limite de mot
Trouvez tout "chat" dans le mot ci-dessus
sans \ b
avec B
la source
\B
n'est pas\b
par exemple négatif\b
pass-key
il n'y a pas de limite de mot à côté-
donc cela correspond\B
dans votre premier exemple il y a une limite de mot à côté de chat donc ça correspond\b
des règles similaires s'appliquent également à d'autres.
\W
est négatif de\w
\UPPER CASE
est négatif de\LOWER CASE
la source