Come diamine posso affrontarli?
Come ogni cosa nuova:
10 Study
20 Practice
30 goto 10
Studia
Trovo che gli insegnanti di maggior successo inizino a insegnare qualsiasi materia fornendo prima un po 'di background alla materia. È importante avere un contesto di ciò che stai imparando e, soprattutto, perché lo stai imparando.
È tutta la corrispondenza delle stringhe
Le espressioni regolari sono un mezzo per abbinare modelli nel testo. È un linguaggio dichiarativo stesso incorporato in numerosi altri linguaggi di programmazione.
Mi piacerebbe sottolineare che si tratta di un linguaggio dichiarativo, le espressioni regolari sono utili per esprimere quello che stringa da abbinare, ma non lo fanno in alcun modo esprimere quanto il programma è quello di andare a fare l'abbinamento. Per questo motivo è possibile utilizzare espressioni regolari molto rapidamente e molto lentamente nello stesso linguaggio di programmazione semplicemente utilizzando un parser RegEx diverso.
Il motivo della creazione di espressioni regolari è lo stesso per la creazione della maggior parte dei linguaggi di programmazione: i programmatori si sono ritrovati a svolgere lo stesso complicato compito più e più volte e hanno deciso di voler un modo più semplice di scrivere il codice.
Alcuni si lamenteranno (e dovrebbero) della mia frase precedente dicendo qualcosa sulla falsariga di:
RegEx non semplifica un programma.
è vero
RegEx non semplifica un programma, RegEx semplifica la scrittura del programma. Devi ancora essere accurato nei tuoi test per essere sicuro che tutti i casi corretti siano abbinati correttamente e tutti i casi errati no. È davvero difficile testare "tutto", e con schemi complicati, è davvero difficile testare "la maggior parte". Nel peggiore dei casi, dovresti comunque provare "alcuni" casi.
incorporiamo alcuni esempi che ho scelto obbligatoriamente il motore RegEx di JavaScript perché posso provarlo facilmente dal vivo nel browser e perché non dovrò fare alcun escape di stringa durante l'uso dei letterali RegEx.
Quando si esegue la normale corrispondenza delle stringhe, si verifica un valore di stringa con un altro. Possono provenire da qualsiasi luogo, ma alla fine sono necessarie due stringhe per confrontarle:
if ( 'foo' == 'bar' ) doSomething();
Questo esempio fa schifo perché non potrà mai fare nulla
if ( foo == 'bar' ) doSomething();
Molto meglio; ora, in realtà non sappiamo in anticipo se verrà fatto o meno qualcosa. Ora possiamo iniziare ad accettare l'input dell'utente:
if ( prompt( 'Say "bar" to do something.' ) == 'bar' ) doSomething();
Meraviglioso, ora gli utenti possono inserire bar
e succederà qualcosa, fino a quando non riceverai segnalazioni di bug da parte di utenti che affermano che "bar"
non funziona o che "BAR" non funziona o che hanno digitato BRA
100 volte e non succede mai nulla.
Ignorando gli errori di ortografia e i caratteri extra 'bar' != 'BAR'
e i programmatori devono escogitare un modo per testare dove i personaggi sono nel caso sbagliato.
Soluzione semplice, uso toLowerCase
. Funziona meravigliosamente, ma per quanto riguarda i nostri utenti che usano l'inglese britannico sull'inglese americano quando si abbina something == 'color'
? Ora dovrai abbinare something == 'color' || somthing == 'colour'
.
Per farla breve, i modelli semplici si trasformano molto rapidamente in molti codici ripetitivi.
L'esempio di colore può essere semplicemente abbinato a:
/colou?r/.test( something )
una solida conoscenza delle basi delle espressioni regolari può ridurre significativamente la quantità di tempo sprecata per reinventare la ruota.
Dove studiare
La maggior parte delle lingue che implementano le espressioni regolari hanno almeno una risorsa disponibile per la sintassi specifica dell'uso delle espressioni regolari all'interno di quella lingua. Uno per JavaScript può essere trovato su MDN
leggilo.
tutto.
poi leggilo di nuovo.
Ci vuole tempo per imparare, pensarlo come un investimento: un'ora per imparare RegEx ora risparmia un'ora la prossima volta che è necessario eseguire una corrispondenza del modello di stringa, e poi un'altra ora la volta successiva.
Pratica
Dopo aver letto tutto su RegEx, probabilmente non capirai gran parte di esso. Questo perché in realtà non ci fai nulla.
Ho menzionato il motivo per cui ho scelto JS per questo esempio, ti esorto a confonderlo nel tuo browser. È veloce e puoi farlo direttamente nella barra degli URL.
JS ha alcuni modi diversi e semplici di utilizzare RegEx:
string.match( regex )
regex.exec( string )
regex.test( string )
A partire da qualcosa di semplice come:
javascript:'color'.match(/colou?r/);
è un modo semplice per mettere il piede nella porta. Gioca con esso, spezzalo per vedere cosa corrisponde e cosa no.
Quando rimani bloccato nella pratica, continua a farlo 30
. Devi leggere per saperne di più, ma devi esercitarti per capire veramente cosa hai imparato.