Ghidul începătorului pentru expresia regulată (Regex)
O expresie regulată este un set de caractere care formează un model care poate fi căutat într-un șir. Regex poate fi folosit pentru validare cum ar fi validarea numerelor cărților de credit, pentru căutare adică prin potriviri complexe de text și pentru înlocuirea textului corespunzător cu un alt șir. De asemenea, are un suport de limbaje multiple - aflați-o odată și puteți să-l utilizați în multe limbi de programare.
Am văzut puțini oameni care aruncă o privire la regex și o ignoră complet. Nu le învinovățesc; sintaxa regex-ului este complexă și va face pe mulți să se prăbușească la fel ca acele limbi de comandă, doar mai rău. Dar fiecare lucru nou este înfricoșător și pare imposibil de învățat la început. Prin urmare, împrumutând cuvintele lui Horatius, voi spune acest lucru; Începeți-vă, fiți îndrăzneți și răsfățați-vă să fiți înțelepți.
Despre Regex
Regex și-a avut rădăcinile în neuroștiințe și matematică și a fost implementat doar în programarea în 1968 de Ken Thompson în editorul de text QED pentru căutare text. Acum face parte din multe limbi de programare precum Perl, Java, Python, Ruby și JavaScript.
Să vedem câteva exemple despre cum funcționează regexul.
Voi folosi JavaScript în exemplele mele. Acum, pentru a trece nivelul începător, trebuie să învățați toate caractere, clase, cuantificatori, modificatori și metode folosit în regex. Iată un link către pagina de expresii regulate a site-ului Mozilla Developer, unde puteți vedea un tabel care conține toate acestea. De asemenea, vă puteți referi la cheatsheet la sfârșitul acestui post cu cele mai folosite caractere.
Să vedem un exemplu simplu, cu o explicație. Acesta este un regex.
Aceasta este ceea ce va arăta regex mai sus într-o linie, un „B“ caracter urmat de cel puțin unul din orice caracter între (inclusiv) „a“ la „z“, „A“ la „Z“ și numere de la 0 la 9.
Iată un eșantion de potriviri într-o linie evidențiată:
Coş, bec, B12 vitamină, BaSO4, N BC companie
Regexul de mai sus va opri căutarea Coş și returnează un răspuns pozitiv. Asta este pentru ca modificatorul global "g
"trebuie specificat dacă doriți ca regexul să examineze toate meciurile posibile.
Acum, să vedem cum să folosim această expresie în JavaScript. Test
metoda merge: dacă se găsește o întoarcere a meciului Adevărat
, altfel fals
.
var input = "șirul de test", regex = / B [a-zA-Z \ d] + /; dacă (! regex.test (input)) alert ('Nu sa găsit niciun rezultat'); alt alert ("Se găsește o potrivire");
Să încercăm altă metodă: Meci
returnează potrivirile găsite într-un matrice.
intrare var = "string test", regex = / B [a-zA-Z \ d] + / g, / * Am adăugat modificator la nivel mondial 'g' la regex pentru a obține toate meciurile * / Ary = input.match (regex); dacă (ary === null) alertă ("Nu se găsește o potrivire"); alt alert ("meciurile sunt: '+ ary.toString ());
Ce zici de șir a inlocui
? Să încercăm asta cu regex acum.
var input = "șirul de test", regex = / B [a-zA-Z \ d] + / g; alertă (input.replace (regex, "#"));
Mai jos este un cod de cod pentru tine pentru a tweak. Faceți clic pe fila "JavaScript" pentru a vizualiza codul JS.
Exerciții
Pentru exerciții, puteți face Google “regex exerciții” și încercați să le rezolvați. Iată ce să vă așteptați atunci când încercați aceste exerciții, în funcție de nivelurile de dificultate.
De bază
Pentru a mă putea validați o parolă este suficient pentru începători. Deci, validați o parolă pentru lungimea de 8 până la 16 caractere, alfanumerică, cu alegerea caracterelor speciale permise.
Intermediar
Acesta este locul unde ar trebui să practici cu mai multe date din lumea reală și să înveți câteva puncte de regex mai multe Privire de ansamblu, afirmații cu privirea și grupuri de potrivire;
- Validați codurile PIN, hexadecimale, datele, ID-ul de e-mail, punctul mobil.
- Înlocuiți zero zero, spații albe, un set de cuvinte potrivite
- Extrageți diferite părți ale unei adrese URL
Avansat
Puteți optimiza soluțiile de exerciții de mai sus - cea mai optimă regex pentru e-mail are mii de caractere în ea - deci luați-o cât de mult vă simțiți confortabilă și asta e de ajuns. De asemenea, puteți încerca:
- Parsarea HTML sau XML (Eventhough în lumea reală este descurajat să facă acest lucru, deoarece, folosind expresii regulate pentru a analiza limbajul non-regulat ca HTML nu se va face foarte simplu de manevrat. Parsing XML Plus este o sarcină dificilă, mai potrivite pentru utilizatorii de nivel avansat)
- Înlocuirea etichetelor
- Eliminarea comentariilor (cu excepția comentariilor condiționale IE)
Unelte
Instrumente pentru vizualiza regex sunt una dintre cele mai bune lucruri acolo pentru mine. Dacă întâlniți vreodată un regex complex lung, copiați-le inserați într-unul din aceste instrumente și veți putea vedea clar fluxul. În afară de asta, există multe instrumente pe care le puteți utiliza pentru a vă juca cu codul regex. Ele prezintă, de asemenea, exemple și cheatsheets împreună cu caracteristicile de partajare.
- Debuggex - Se trage o diagrama regex ca pe intrarea dvs. și puteți face o partajare rapidă la StackOverflow chiar de acolo.
- RegExr - Puteți testa regex-ul dvs. cu acesta. De asemenea, a avut o referință, un cheatsheet și exemple pentru a vă ajuta.
- Refiddle - În prezent, în afară de JavaScript, puteți, de asemenea, să vă răsuciți cu versiunile Ruby și .NET ale regexului în el.
Regex Cheatsheet
Jeton | Definiție |
[Abc] | Orice caracter unic a, b sau c |
[^ Abc] | Orice caracter diferit de a, b sau c |
[A-z] | Caracterul dintre (inclusiv) a la z |
[^ A-z] | Caracter de excepție de la a la z |
[A-Z] | Caracterul dintre (inclusiv) de la A la Z |
. | Orice caracter unic |
\ s | Orice caracter al spațiului alb |
\ S | Orice caracter non-spațiu |
\ d | Orice cifre de la 0 la 9 |
\ D | Orice non-cifră |
\ w | Orice caracter cuvânt (literă, număr & subliniere) |
\ W | Orice caracter non-cuvânt |
(...) | Capturați totul închis |
(A | b) | Se potrivește fie a, fie b |
A? | Caracterul a este fie absent, fie prezent o singură dată |
A* | Caracterul a este fie absent, fie prezent de mai multe ori |
A+ | Caracterul a este prezent unul sau mai multe ori |
o 3 | 3 apariții de caracter consecutiv |
o 3 | 3 sau mai multe apariții de caracter consecutiv |
o 3,6 | 3 până la 6 apariții de caracter consecutiv |
^ | Începerea șirului |
$ | Sfârșitul șirului |
\ b | O limită de cuvânt. Dacă un caracter este ultimul sau primul cuvânt al cuvântului unui cuvânt sau dacă un caracter este între un cuvânt sau un caracter non-cuvânt |
\ B | Limită fără limită |