Il confine di parola \b
è un test, proprio come ^
e $
.
Quando l’interprete delle regexp (il modulo software che cerca all’interno delle espressioni regolari) incontra \b
, verifica se la posizione nella stringa sia un confine di parola.
Ci sono tre differenti posizioni che qualificano il confine di parola:
- Ad inizio stringa, se il primo carattere di essa è un carattere di parola
\w
. - Tra due caratteri di una stringa, laddove il primo sia un carattere di parola
\w
e l’altro no. - A fine stringa, se l’ultimo carattere è un carattere di parola
\w
.
Ad esempio, la regexp \bJava\b
troverà corrispondenza in Hello, Java!
, dove Java
è una parola a sé, ma non troverà alcuna corrispondenza in Hello, JavaScript!
.
alert( "Hello, Java!".match(/\bJava\b/) ); // Java
alert( "Hello, JavaScript!".match(/\bJava\b/) ); // null
Nella stringa Hello, Java!
trovano riscontro in \b
le seguenti posizioni:
Pertanto la corrispondenza con il pattern \bHello\b
viene trovata perché:
- All’inizio della stringa trova riscontro con il primo test
\b
. - Successivamente identifica la parola
Hello
. - Infine trova ancora corrispondenza con il test
\b
, dal momento che la posizione corrente è tra unao
e una virgola.
Viene quindi individuato il pattern \bHello\b
, ma non \bHell\b
(perché non c’è un confine di parola dopo la l
) e non Java!\b
(perché il punto esclamativo non è un carattere di parola \w
, quindi non c’è confine di parola dopo di esso).
alert( "Hello, Java!".match(/\bHello\b/) ); // Hello
alert( "Hello, Java!".match(/\bJava\b/) ); // Java
alert( "Hello, Java!".match(/\bHell\b/) ); // null (nessuna corrispondenza)
alert( "Hello, Java!".match(/\bJava!\b/) ); // null (nessuna corrispondenza)
Possiamo usare \b
anche con i numeri non solo con le parole.
Il pattern \b\d\d\b
, ad esempio, cerca due caratteri numerici a sé stanti. In altre parole, cerca un numero di due cifre delimitato da caratteri differenti da \w
, come spazi o punteggiatura (o l’inizio/la fine della stringa).
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
\b
funziona solo con l’alfabeto latinoIl test di confine parola \b
controlla che ci sia \w
da un lato della posizione e che non ci sia \w
dall’altro lato.
Ma \w
significa una lettera dell’alfabeto latino a-z
(o un numero o un underscore), pertanto il test non è efficace per altri caratteri, es. caratteri cirillici o simboli grafici.
Commenti
<code>
, per molte righe – includile nel tag<pre>
, per più di 10 righe – utilizza una sandbox (plnkr, jsbin, codepen…)