Guida per principianti all'espressione regolare (Regex)
Un'espressione regolare è un insieme di caratteri che formano un modello che può essere ricercato in una stringa. Regex può essere usato per convalida tale da convalidare i numeri delle carte di credito, per ricerca cioè tramite partite di testo complesse e per sostituendo il testo abbinato con un'altra stringa. Ha anche un ottimo supporto per più lingue: imparalo una volta e puoi usarlo in molti linguaggi di programmazione.
Ho visto poche persone dare una prima occhiata alla regex e ignorarla completamente. Non li biasimo; la sintassi di regex è complessa e farà molti cringe proprio come quei linguaggi della linea di comando, solo peggio. Ma poi ogni cosa nuova è spaventosa e sembra impossibile da imparare all'inizio. Quindi, prendendo in prestito le parole di Horatius, dirò questo; Inizia, sii audace e cerca di essere saggio.
Informazioni su Regex
Il Regex affonda le sue radici nelle neuroscienze e nella matematica ed è stato implementato in programmazione solo nel 1968 da Ken Thompson nel campo dell'editor di testo per la ricerca di testo. Ora fa parte di molti linguaggi di programmazione come Perl, Java, Python, Ruby e JavaScript.
Diamo un'occhiata ad alcuni esempi su come funziona la regex.
Userò JavaScript nei miei esempi. Ora, per passare il livello principiante, è necessario imparare tutto il caratteri, classi, quantificatori, modificatori e metodi usato in regex. Ecco un collegamento alla pagina delle espressioni regolari di Mozilla Developer Network in cui è possibile visualizzare una tabella che contiene tutti questi elementi. Puoi anche fare riferimento al cheatsheet alla fine di questo post con i caratteri più usati.
Vediamo un semplice esempio con una spiegazione. Questa è una regex.
Questo è ciò che la regex precedente cercherà in una riga, un carattere 'B' seguito da almeno uno qualsiasi dei caratteri tra (e compresi) 'a' a 'z', 'A' a 'Z' e numeri da 0 a 9.
Ecco un esempio di corrispondenze in una riga evidenziata:
Cestino, lampadina, B12 vitamina, BaSO4, N AVANTI CRISTO azienda
La regex precedente interromperà la ricerca a Cestino e restituire una risposta positiva. È perché il modificatore globaleg
'deve essere specificato se vuoi che la regex guardi tutte le possibili corrispondenze.
Ora, vediamo come usare questa espressione in JavaScript. Il test
metodo va: se trovato un ritorno partita vero
, altro falso
.
var input = "la tua stringa di prova", regex = / B [a-zA-Z \ d] + /; se (! regex.test (input)) alert ('Nessuna corrispondenza trovata'); altro avviso ('Una corrispondenza è stata trovata');
Proviamo un altro metodo: incontro
restituisce le corrispondenze trovate in un array.
var input = "la tua stringa di prova", regex = / B [a-zA-Z \ d] + / g, / * Ho aggiunto il modificatore globale 'g' alla regex per ottenere tutte le corrispondenze * / ary = input.match (regex); se (ary === null) alert ('Nessuna corrispondenza trovata'); altro avviso ('le corrispondenze sono:' + ary.toString ());
Che ne dici di una corda sostituire
? Proviamo ora con regex.
var input = "la tua stringa di prova", regex = / B [a-zA-Z \ d] + / g; alert (input.replace (regex, "#"));
Di seguito è riportato un codice da modificare. Fare clic sulla scheda "JavaScript" per visualizzare il codice JS.
esercizi
Per gli esercizi, puoi google “Esercizi regex” e prova a risolverli. Ecco cosa aspettarsi quando si provano questi esercizi, in base ai livelli di difficoltà.
Di base
Per me essere in grado di convalidare una password è abbastanza per i principianti. Quindi, convalidare una password di lunghezza compresa tra 8 e 16 caratteri, alfanumerico con la scelta di caratteri speciali consentiti.
Intermedio
È qui che dovresti esercitarti con più dati del mondo reale e imparare alcuni altri punti regex come guarda avanti, guarda dietro affermazioni e gruppi corrispondenti;
- Convalida codici PIN, esadecimali, date, ID e-mail, virgola mobile.
- Sostituisci zero finale, spazi bianchi, un insieme di parole corrispondenti
- Estrai diverse parti di un URL
Avanzate
È possibile ottimizzare le soluzioni degli esercizi di cui sopra - la regex più ottimale per la posta elettronica ha migliaia di caratteri al suo interno - quindi prendilo per quanto ti senti a tuo agio e basta. Puoi anche provare:
- Analisi HTML o XML (anche se nel mondo reale è scoraggiato farlo perché usare l'espressione regolare per analizzare il linguaggio non regolare come HTML non lo renderà mai infallibile. Inoltre l'analisi XML è un compito difficile, più adatto agli utenti di livello avanzato)
- Sostituzione dei tag
- Rimozione di commenti (eccetto i commenti condizionali di IE)
Utensili
Strumenti per visualizza regex sono una delle cose più belle là fuori per me. Se ti imbatti in una lunga regex complessa, copia semplicemente incollali in uno di questi strumenti e sarai in grado di visualizzare il flusso in modo chiaro. Oltre a ciò, ci sono molti strumenti che puoi usare per giocare con il codice regex. Presentano anche esempi e cheatsheets con funzionalità di condivisione.
- Debuggex - Disegna un diagramma regex come da input e puoi fare una rapida condivisione a StackOverflow direttamente da lì.
- RegExr: puoi testare il tuo regex con questo. Ha anche ottenuto un riferimento, un cheatsheet ed esempi per aiutarti.
- Refiddle - Al momento, oltre a JavaScript, puoi anche giocherellare con le versioni di regex di Ruby e .NET.
Regex Cheatsheet
Gettone | Definizione |
[Abc] | Qualsiasi singolo carattere a, boc |
[^ Abc] | Qualsiasi carattere diverso da a, b o c |
[A-z] | Carattere tra (compreso) dalla a alla z |
[^ A-z] | Carattere tranne dalla A alla Z. |
[A-Z] | Carattere tra (compresi) dalla A alla Z. |
. | Qualsiasi singolo personaggio |
\S | Qualsiasi carattere di spazio bianco |
\S | Qualsiasi carattere non di spazio bianco |
\ d | Qualsiasi cifra da 0 a 9 |
\ D | Qualsiasi non cifra |
\ w | Qualsiasi carattere di parola (lettera, numero e trattino basso) |
\ W | Qualsiasi carattere non verbale |
(...) | Cattura tutto chiuso |
(A | B) | Abbina o a o b |
un? | Il personaggio a è assente o presente una volta |
un* | Il personaggio a è assente o presente più volte |
un+ | Il carattere a è presente una o più volte |
un 3 | 3 occorrenze di carattere a consecutivo |
un 3, | 3 o più occorrenze di carattere a consecutivo |
a 3,6 | Da 3 a 6 occorrenze di carattere a consecutivo |
^ | Inizio della stringa |
$ | Fine della stringa |
\ b | Un limite di parole. Se un carattere è il carattere dell'ultima o della prima parola di una parola o Se un carattere si trova tra un carattere di parole o non parole |
\ B | Limite non parola |