JavaScript/Espressioni regolari: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Gian BOT (discussione | contributi)
m Bot: sostituzione tag obsoleti
m Update syntaxhighlight tags - remove use of deprecated <source> tags
Riga 11:
== Espressioni regolari in JavaScript ==
L'uso delle espressioni regolari in JavaScript si basa sul'oggetto <code>RegExp</code>:
<sourcesyntaxhighlight lang=javascript>
var myRegex = new RegExp ("testo della regex", "parametri");
var r = new RegExp ("Ciao *", "g");
</syntaxhighlight>
</source>
Il primo parametro è l'espressione regolare vera e propria, mentre il secondo (opzionale) è una stringa combinando uno o più parametri espressi come lettere:
* '''g''' indica un abbinamento globale (ovvero verranno abbinate tutte le istanze che corrispondono all'espressione regolare e non solo la prima)
Riga 20:
 
Esiste anche una forma abbreviata per la creazione, che useremo più spesso:
<sourcesyntaxhighlight lang=javascript>
var myRegex = /testo della regex/parametri;
var r = /[Ee]spressione regolare/ig;
</syntaxhighlight>
</source>
 
== Sintassi delle espressioni regolari ==
Riga 57:
 
Per verificare che una regex abbini una stringa, usiamo il metodo <code>test</code> dell'oggetto RegExp che restituisce <code>true</code> se la regex si abbina, <code>false</code> in caso contrario:
<sourcesyntaxhighlight lang=javascript>
var username = document.form.username.value; //prende il nome dal form
var myRegex = /\W/i; //non serve effettuare una ricerca globale
Riga 70:
}
 
</syntaxhighlight>
</source>
 
=== Caratteri di ripetizione ===
Riga 91:
 
Supponiamo ad esempio di aver chiesto all'utente di inserire un [[w:Codice di avviamento postale|CAP]] e di voler verificare che sia valido:
<sourcesyntaxhighlight lang=javascript>
var cap = document.form.username.value; //prende il nome dal form
var myRegex = /\d{5}/; //5 cifre
Riga 100:
alert('Inserire un CAP valido');
}
</syntaxhighlight>
</source>
 
=== Posizione ===
Riga 135:
Il metodo <code>replace ()</code> sostituisce il testo abbinato dalla regex indicata come primo parametro con il testo indicato nella seconda.
<br/>Si ricordi sempre che per sostituire ''tutte'' le occorrenze abbinate dalla regex è necessario impostare il parametro globale della regex; supponiamo di voler eliminare tutti i caratteri da una stringa in modo da ottenere un numero intero:
<sourcesyntaxhighlight lang=javascript>
var str = new String('245dfh57w');
var num = str.replace(/\D/, ''); //restituisce "245fh57w"
var num2 = str.replace(/\D/g, ''); //restituisce "24557"
</syntaxhighlight>
</source>
 
Anche nei replace è possibile utilizzare dei ''backreference'', usando la sintassi <code>$''n''</code>:
<sourcesyntaxhighlight lang=javascript>
//corregge le diciture "cm n" con "n cm"
var str = "La base misura cm 30 e l'altezza cm 50";
var str2 = str.replace(/([mdc]m) (\d+([\.,]\d+)?)/gi, "$2 $1");
</syntaxhighlight>
</source>
Esaminiamo la nostra regex <code>/([mdc]m) ((\d+(\.\d+)?)/gi</code>:
* <code>[mdc]m</code> serve per abbinare uno tra i tre caratteri ''m'', ''d'' o ''c'' seguiti da m: in questo modo verranno abbinati ''cm'', ''dm'' e ''mm'';
Riga 157:
 
È possibile abbinare anche delle posizioni:
<sourcesyntaxhighlight lang=javascript>
var str = "Lorem ipsum dolor sit amet";
var str2 = str.replace(/\B/g, '|'); //sostituisce i caratteri non di fine stringa con "|"
//ora str2 contiene L|o|r|e|m i|p|s|u|m d|o|l|o|r s|i|t a|m|e|t
</syntaxhighlight>
</source>
 
=== search() ===
Riga 170:
 
Ad esempio supponiamo di voler cercare tutti gli indirizzi e-mail presenti in un testo:
<sourcesyntaxhighlight lang=javascript>
var myRegex = /\b\w+@\w+\.\w{2,3}\b/gi;
var indirizzi = testo.match(myRegex);
</syntaxhighlight>
</source>
La nostra regex abbina una parola intera (<code>\b...\b</code>) composta da uno o più caratteri parola (<code>\w+</code>) seguiti da una chiocciola, altri caratteri di parola, seguiti da un punto (<code>\.</code>: il backslash serve per evitare di usare il metacarattere punto) e da due o tre caratteri di parola (<code>\w'''{2,3}'''</code>).