L’accento circonflesso '^' e il simbolo del dollaro '$' sono caratteri che hanno un significato speciale nelle regexp. Vengono chiamati “ancoraggi” (anchor).
Il simbolo ^ trova corrispondenza all’inizio del testo, e il dollaro $ la trova alla fine del testo.
Per esempio, vediamo se il testo inizia con Mary:
let str1 = "Mary had a little lamb, it's fleece was white as snow";
let str2 = 'Everywhere Mary went, the lamp was sure to go';
alert( /^Mary/.test(str1) ); // true
alert( /^Mary/.test(str2) ); // false
Il pattern ^Mary vuol dire: “la stringa inizia e subito dopo c’è Mary”.
Ora verifichiamo se il testo finisce con una email.
Per trovare corrispondenza con un’email, possiamo usare la regexp [-.\w]+@([\w-]+\.)+[\w-]{2,20}.
Per testare se la stringa finisca con una email, aggiungiamo $ al pattern:
let reg = /[-.\w]+@([\w-]+\.)+[\w-]{2,20}$/g;
let str1 = 'My email is mail@site.com';
let str2 = 'Everywhere Mary went, the lamp was sure to go';
alert( reg.test(str1) ); // true
alert( reg.test(str2) ); // false
Possiamo utilizzare entrambi gli ancoraggi insieme per controllare che la stringa segua uno specifico pattern. È un metodo usato spesso per la validazione.
Per esempio vogliamo controllare che str sia esattamente un colore nella forma # più 6 esadecimali. Il pattern per il colore è #[0-9a-f]{6}.
Per verificare che l’intera stringa vi corrisponda in modo esatto, aggiungiamo ^...$:
let str = "#abcdef";
alert( /^#[0-9a-f]{6}$/i.test(str) ); // true
Il motore delle regexp cerca l’inizio del testo, successivamente il colore, e infine cerca immediatamente la fine del testo. Proprio ciò di cui abbiamo bisogno.
Gli ancoraggi, proprio come \b, sono test. Hanno larghezza zero.
In altre parole, non cercano corrispondenze per un carattere, piuttosto forzano il motore delle regexp a cercare la condizione specifica (inizio/fine del testo).
Il comportamento degli ancoraggi cambia se c’è la flag m (modalità multi linea). L’approfondiremo meglio nel prossimo capitolo.
Commenti
<code>, per molte righe – includile nel tag<pre>, per più di 10 righe – utilizza una sandbox (plnkr, jsbin, codepen…)