Documentazione di Flash CS3 |
|||
| Programmazione in ActionScript 3.0 > Uso delle espressioni regolari > Sintassi delle espressioni regolari > Gruppi | |||
Per specificare un gruppo all'interno di un'espressione regolare si possono usare le parentesi, come nell'esempio seguente:
/class-(\d*)/
Un gruppo è un segmento di un modulo. I gruppi permettono di:
|).\1 in un'espressione regolare per trovare un gruppo trovato in precedenza o usando $1 in modo simile al metodo replace() della classe String).Le sezioni seguenti forniscono alcuni dettagli sull'uso dei gruppi.
Se non sono stati definiti dei gruppi, il quantificatore si riferisce al carattere o alla classe di caratteri che lo precede, come illustra l'esempio seguente:
var pattern:RegExp = /ab*/; // corrisponde al carattereaseguito da // zero o più occorrenze del caratterebpattern = /a\d+/;// corrisponde al carattereaseguito da // una o più cifrepattern = /a[123]{1,3}/; // corrisponde al carattereaseguito da // da una a tre occorrenze di 1, 2 o 3
Tuttavia, definendo un gruppo è possibile applicare un quantificatore a più di un carattere o a più di una classe di caratteri:
var pattern:RegExp = /(ab)*/; // corrisponde a zero o a più occorrenze del caratterea// seguito dal carattereb, come in abababpattern = /(a\d)+/; // corrisponde a una o a più occorrenze del carattereaseguito da // una cifra, come in a1a5a8a3pattern = /(spam ){1,3}/;// corrisponde a 1, 2 o 3 occorrenze della parolaspamseguita da uno spazio
Per ulteriori informazioni sui quantificatori, vedere Quantificatori.
I gruppi consentono di definire una serie di caratteri a cui applicare il carattere di alternanza (|), nel modo seguente:
var pattern:RegExp = /cat|dog/; // corrisponde a cat o a dogpattern = /ca(t|d)og/; // corrisponde a catog o a cadog
Se all'interno di un modello si definisce un gruppo parentetico standard, è possibile aggiungere dei riferimenti al gruppo in un punto successivo dell'espressione regolare. Questo tipo riferimenti sono definiti a posteriori e questo tipo di gruppi sono conosciuti come gruppi di cattura. Ad esempio, nell'espressione regolare seguente, la sequenza \1 corrisponde alla sottostringa individuati dal gruppo di cattura parentetico:
var pattern:RegExp = /(\d+)-by-\1/;
// corrisponde a: 48-by-48
All'interno di un'espressione regolare, si possono specificare fino a 99 riferimenti a posteriori digitando \1, \2, ... , \99.
Analogamente, nel metodo replace() della classe String, si può usare $1-$99 per inserire nella stringa di sostituzione corrispondenze a sottostringhe dei gruppi catturati:
var pattern:RegExp = /Hi, (\w+)\./;
var str:String = "Hi, Bob.";
trace(str.replace(pattern, "$1, hello."));
// output: Bob, hello.
Inoltre, quando si usano gruppi di cattura, il metodo exec() della classe RegExp class e il metodo match() della classe String restituiscono sottostringhe che corrispondono ai gruppi di cattura:
var pattern:RegExp = /(\w+)@(\w+).(\w+)/;
var str:String = "bob@example.com";
trace(pattern.exec(str));
// bob@test.com,bob,example,com
Un gruppo di non cattura è un semplice costrutto di raggruppamento che non viene raccolto e fa riferimento a corrispondenze precedenti. Usare (?: e ) per definire i gruppi di non cattura come descritto di seguito:
var pattern = /(?:com|org|net);
Ad esempio, si noti la differenza che esiste tra inserire (com|org) in un gruppo di cattura e inserirlo in un gruppo di non cattura (il metodo exec() elenca i gruppi di cattura dopo una corrispondenza completa):
var pattern:RegExp = /(\w+)@(\w+).(com|org)/; var str:String = "bob@example.com"; trace(pattern.exec(str)); // bob@test.com,bob,example,com //noncapturing: var pattern:RegExp = /(\w+)@(\w+).(?:com|org)/; var str:String = "bob@example.com"; trace(pattern.exec(str)); // bob@test.com,bob,example
Un tipo speciale di gruppo di non cattura è il gruppo lookahead che, a sua volta, si declina in due tipi: gruppo lookahead positivo e gruppo lookahead negativo.
Per definire un gruppo lookahead positivo, usare (?= e ), che specifica che il sottomodello del gruppo deve corrispondere alla posizione. Tuttavia, la porzione di stringa che corrisponde al gruppo lookahead positivo può corrispondere agli altri modelli dell'espressione regolare. Ad esempio, dal momento che nel frammento di codice seguente (?=e) è un gruppo lookahead positivo, il carattere e individuato può essere individuato anche da porzioni successive dell'espressione regolare, in questo caso dal gruppo di cattura \w*):
var pattern:RegExp = /sh(?=e)(\w*)/i; var str:String = "Shelly sells seashells by the seashore"; trace(pattern.exec(str)); // Shelly,elly
Per definire un gruppo lookahead negativo, usare (?! e ) che specificano che il sottomodello del gruppo non deve corrispondere alla posizione. Ad esempio:
var pattern:RegExp = /sh(?!e)(\w*)/i; var str:String = "She sells seashells by the seashore"; trace(pattern.exec(str)); // shore,ore
Un gruppo denominato di un'espressione regolare è un gruppo a cui è stato assegnato un nome. Per definire un gruppo denominato, usare (?P<name> e ). L'espressione regolare dell'esempio seguente contiene il gruppo denominato digits:
var pattern = /[a-z]+(?P<digits>\d+)[a-z]+/;
Quando si usa il metodo exec(), un gruppo denominato corrispondente viene aggiunto come proprietà dell'array result:
var myPattern:RegExp = /([a-z]+)(?P<digits>\d+)[a-z]+/; var str:String = "a123bcd"; var result:Array = myPattern.exec(str); trace(result.digits); // 123
Segue un altro esempio che contiene due gruppi denominati (name e dom):
var emailPattern:RegExp =
/(?P<name>(\w|[_.\-])+)@(?P<dom>((\w|-)+))+\.\w{2,4}+/;
var address:String = "bob@example.com";
var result:Array = emailPattern.exec(address);
trace(result.name); // bob
trace(result.dom); // esempio
|
NOTA |
|
I gruppi denominati non fanno parte della specifica del linguaggio ECMAScript. Sono una funzione speciale di ActionScript 3.0. |
Flash CS3
Inviami un messaggio e-mail quando vengono aggiunti dei commenti a questa | Rapporto sui commenti
Pagina corrente: http://livedocs.adobe.com/flash/9.0_it/main/00000118.html