Differenza tra \ b e \ B nella regex

Sto leggendo un libro sull’espressione regolare e ho trovato questo esempio per \b :

Il gatto sparse il suo cibo per tutta la stanza.

Usando regex\bcat\b corrisponderà alla parola cat ma non al cat in scattered .

Per \B l’autore utilizza il seguente esempio:

Si prega di inserire l’ID di nove cifre come esso

appare sul pass-key codificato a colors.

Usando regex \B-\B corrisponde - tra la parola color - coded . L’uso di \b-\b d’altra parte corrisponde al - in nine-digit e al pass-key .

Come mai nel primo esempio usiamo \b per separare cat e nel secondo use \B per separare - ? L’utilizzo di \b nel secondo esempio fa l’opposto di ciò che ha fatto in precedenza.

Per favore, spiegami la differenza.

EDIT: Inoltre, qualcuno può spiegare per favore con un nuovo esempio?

La confusione deriva dal tuo pensiero \b corrisponde agli spazi (probabilmente perché “b” suggerisce “vuoto”).

\b corrisponde alla stringa vuota all’inizio o alla fine di una parola . \B corrisponde alla stringa vuota non all’inizio o alla fine di una parola. La chiave qui è che “-” non fa parte di una parola. Quindi - corrisponde a \b-\b perché ci sono dei limiti di parole su entrambi i lati del - . D’altra parte per - (notare gli spazi), non ci sono limiti di parole su entrambi i lati del trattino. I confini della parola sono uno spazio più a sinistra e a destra.

D’altra parte, quando si cercano i limiti di parola \bcat\b comportano in modo più intuitivo e corrispondono a “cat” come previsto.

\b è un limite di parola a larghezza zero. In particolare:

Corrisponde alla posizione tra un carattere di parola (qualsiasi cosa corrisponde a \ w) e un carattere diverso da una parola (qualsiasi cosa corrisponda a [^ \ w] o \ W), nonché all’inizio e / o alla fine della stringa se il primo e / o gli ultimi caratteri nella stringa sono caratteri di parole.

Esempio:. .\b corrisponde a c in abc

\B è un limite di non parola a larghezza zero. In particolare:

Corrisponde alla posizione tra due caratteri di parole (cioè la posizione tra \ w \ w) e alla posizione tra due caratteri non di parole (cioè \ W \ W).

Esempio: \B.\B corrisponde a b in abc

Vedi regular-expressions.info per maggiori informazioni sulle espressioni regolari

Con un esempio diverso:

Considera che questa è la stringa e il modello da cercare è ‘gatto’:

text = "catmania thiscat thiscatmaina";

Ora definizioni,

‘\ b’ trova / corrisponde al modello all’inizio o alla fine di ogni parola.

‘\ B’ non trova / corrisponde il modello all’inizio o alla fine di ogni parola.

Diversi casi:

Caso 1: all’inizio di ogni parola

result = text.replace(/\bcat/g, "ct");

Ora, il risultato è “ctmania thiscat thiscatmaina”

Caso 2: alla fine di ogni parola

result = text.replace(/cat\b/g, "ct");

Ora, il risultato è “catmania thisct thiscatmaina”

Caso 3: non all’inizio

result = text.replace(/\Bcat/g, "ct");

Ora, il risultato è “catmania thisct thisctmaina”

Caso 4: non alla fine

result = text.replace(/cat\B/g, "ct");

Ora, il risultato è “ctmania thiscat thisctmaina”

Caso 5: né inizio né fine

result = text.replace(/\Bcat\B/g, "ct");

Ora, il risultato è “catmania thiscat thisctmaina”

Spero che questo ti aiuti 🙂

Il metacarattere \ b è un’ancora come il segno di omissione e il segno del dollaro. Corrisponde a una posizione chiamata “limite di parole”. Questa partita è a lunghezza zero.

Ci sono tre diverse posizioni che si qualificano come limiti di parole:

  • Prima del primo carattere nella stringa, se il primo carattere è un carattere di parola.
  • Dopo l’ultimo carattere nella stringa, se l’ultimo carattere è un carattere di parola.
  • Tra due caratteri nella stringa, dove uno è un carattere di parola e l’altro non è un carattere di parola.

\ B è la versione negata di \ b . \ B corrisponde a tutte le posizioni in cui \ b non lo fa. In effetti, \ B corrisponde in qualsiasi posizione tra due caratteri di parole e in qualsiasi posizione tra due caratteri non di parole.

Fonte: http://www.regular-expressions.info/wordboundaries.html

\b corrisponde a un limite di parole. \B corrisponde a non-word-boundaries ed è equivalente a [^\b] (?!\b) (grazie a @Alan Moore per la correzione!) . Entrambi sono a larghezza zero.

Vedi http://www.regular-expressions.info/wordboundaries.html per i dettagli. Il sito è estremamente utile per molte domande base di regex.

\B non \b pe negativo \b

pass-key qui non contiene alcun limite di parola - quindi corrisponde a \B nel tuo primo esempio ci sono dei limiti di parola accanto a cat in modo che corrisponda a \b

regole simili si applicano anche ad altre. \W è negativo di \w \UPPER CASE è negativo di \LOWER CASE

Prendi una stringa come:

XIX IXI XX XI II IIXX XXII II XX -X X- XI IX -X- -IX -XI IX- XI- X_X _X-

Nota: Underscore (_) non è considerato un carattere speciale in questo caso.

  1. /\bX\b/g Dovrebbe iniziare e terminare con un carattere speciale o uno spazio bianco

XIX IXI XX X I II IIXX XXII II XXX XX -I I- XX – -I- XX -I I- XX -I- X_X _X-


  1. /\bX/g Dovrebbe iniziare con un carattere speciale o uno spazio bianco

X IX IXI X X X I II IIXX X XII II XXX XX – I – XX – -I- XX -I I- XX -I- X _X _X-


  1. /X\b/g Dovrebbe finire con un personaggio speciale o uno spazio bianco

XI X IXI X X X I II IIX X XXII II XXX XX -I I- XX – -I- XX -I I- XX -I- X_ X _ X


  1. /\BX\B/g
    Non dovrebbe iniziare e non finire con un personaggio speciale o uno spazio bianco

XIX I X I XX XI II II X X X X II II XX -X X- XI IX -X- -IX -XI IX- XI- X_X _X-


  1. /\BX/g Non dovrebbe iniziare con un carattere speciale o uno spazio bianco

XI XI XI X X XI II II XX X X II II XX -X X- XI IX -X- -IX -XI IX- XI- X_ X _ X


  1. /X\B/g Non dovrebbe finire con un personaggio speciale o uno Spazio bianco

X IX I X I X X XI II II X X XX II II XX -X X- XI IX -X- -IX -XI IX- XI- X _X _X-


  1. /\bX\B/g Dovrebbe iniziare e non finire con un carattere speciale o uno spazio bianco

X IX IXI X X XI II II X X X XII II XX X X X X IX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X


  1. /\BX\b/g Non dovrebbe iniziare e dovrebbe terminare con un carattere speciale o Spazio bianco

XI X IXI X X XI II II X X XII XII XX X XI XX X X X X X X X X X