Vodič za početnike za regularni izraz (Regex)
Uobičajeni izraz je skup znakova koji tvore uzorak koji se može pretraživati u nizu. Regex se može koristiti za potvrđivanje kao što je potvrda brojeva kreditnih kartica, za traži tj. putem složenih tekstualnih podudaranja i za zamjenjuje odgovarajući tekst s drugim nizom. Ona također ima veliku podršku više jezika - naučiti jednom i možete ga koristiti na mnogim programskim jezicima.
Vidio sam nekoliko ljudi koji prvi pogledaju regex i potpuno ga ignoriraju. Ne krivim ih; sintaksa regexa je složena i učinit će mnoge gužve poput onih u jezicima naredbenog retka, samo još gore. Ali onda je svaka nova stvar zastrašujuća i čini se da je u početku nemoguće naučiti. Dakle, posuđujući Horatiusove riječi reći ću ovo; Počnite, budite hrabri i usudite se biti mudri.
O Regexu
Regex je imao svoje korijene u neuroznanosti i matematici, a programirao ga je tek 1968. Ken Thompson u QED uređivaču teksta za pretraživanje teksta. Sada je dio mnogih programskih jezika kao što su Perl, Java, Python, Ruby i JavaScript.
Pogledajmo nekoliko primjera kako radi regex.
Ja ću koristiti JavaScript u mojim primjerima. Sada, da biste prošli početničku razinu, morate naučiti sve znakovi, klase, kvantifikatori, modifikatori i metode koristi se u regexu. Evo veze na stranicu regularnog izraza mreže Mozilla Developer Network gdje možete vidjeti tablicu koja sadrži sve te. Možete također pogledati i sažetak na kraju ovog posta s najčešće korištenim znakovima.
Pogledajmo jednostavan primjer s objašnjenjem. Ovo je izraz.
To je ono što će gore navedeni regex tražiti u retku, znak 'B' iza kojeg slijedi barem jedan od bilo kojeg znaka između (i uključujući) 'a' do 'z', 'A' do 'Z' i brojeva 0 do 9.
Evo primjera podudaranja u označenom retku:
Košara, žarulja, B12 vitamin, BaSO4, N PRIJE KRISTA društvo
Gornji regex će zaustaviti pretraživanje na Košara i vratiti pozitivan odgovor. To je zato što globalni modifikator "g
'treba navesti ako želite da regex pogleda sve moguće utakmice.
Sada ćemo vidjeti kako koristiti ovaj izraz u JavaScriptu. test
metoda ide: ako je pronađena podudarnost pravi
, drugo lažan
.
var input = "vaš test string", regex = / B [a-zA-Z d] + /; ako je upozorenje (! regex.test (input)) ("Nije pronađeno nijedan rezultat"); drugo upozorenje ("Pronađeno je podudaranje");
Pokušajmo s drugom metodom: utakmica
vraća podudaranja pronađena u nizu.
var input = "vaš testni niz", regex = / B [a-zA-Z d] + / g, / * Dodao sam globalni modifikator 'g' u regex da bi dobio sve podudarnosti * / ary = input.match (regex); ako je upozorenje (ary === null) ('Nema podudaranja'); else alert ('podudaranja su:' + ary.toString ());
Što kažeš na niz zamijeniti
? Pokušajmo sada s regexom.
var input = "vaš test string", regex = / B [a-zA-Z d] + / g; upozorenje (input.replace (regex, "#"));
Ispod je kodna oznaka za podešavanje. Kliknite karticu "JavaScript" da biste vidjeli JS kod.
vježbe
Za vježbe, možete google “vježbe regexa” i pokušajte ih riješiti. Evo što možete očekivati kada pokušate ove vježbe, prema stupnjevima težine.
Osnovni, temeljni
Za mene to mogu potvrdite lozinku dovoljno za početak. Dakle, potvrdite lozinku za duljinu od 8 do 16 znakova, alfanumerički s dopuštenim izborom posebnih znakova.
srednji
Ovdje trebate vježbati s više podataka iz stvarnog svijeta i naučiti još nekoliko točaka regexa pogleda, gledaj iza tvrdnji i odgovarajuće grupe;
- Potvrdite PIN kodove, heksadecimalne brojeve, datume, ID e-pošte, pokretnu točku.
- Zamijenite zadnju nulu, razmake, skup podudarnih riječi
- Izdvojite različite dijelove URL-a
Napredna
Možete optimizirati rješenja gore navedenih vježbi - najoptimalniji regex za e-poštu ima tisuće znakova u njemu - tako uzmite ga koliko vam je ugodno i to je dovoljno. Možete i pokušati:
- Raščlanjivanje HTML-a ili XML-a (iako se u stvarnom svijetu to obeshrabruje jer korištenje regularnog izraza za raščlanjivanje ne-uobičajenog jezika kao što je HTML neće ga učiniti sigurnim. Plus XML parsiranje je težak zadatak, prikladniji za napredne korisnike)
- Zamjena oznaka
- Uklanjanje komentara (osim uvjetnih komentara za IE)
alat
Alati za vizualizirajte regex su jedna od najboljih stvari za mene. Ako ikada naiđete na dugi kompleksni regeks, samo ih kopirajte u jedan od tih alata i moći ćete jasno vidjeti protok. Osim toga, postoji mnogo alata koje možete koristiti za gusle s regex kodom. Oni također prikazuju primjere i šahovnice zajedno s značajkama dijeljenja.
- Debuggex - iscrtava regex dijagram prema Vašem unosu i odatle možete brzo dijeliti StackOverflow.
- RegExr - Možete testirati svoje regex s ovim. Također je dobio referencu, cheatsheet i primjere koji će vam pomoći.
- Refiddle - U ovom trenutku, osim JavaScript, također možete gusle s Ruby i. NET verzijama regex u njemu.
Regex Cheatsheet
žeton | definicija |
[Abc] | Bilo koji pojedinačni znak a, b ili c |
[^ Abc] | Bilo koji znak osim a, b ili c |
[A-z] | Znak između (uključujući) od a do z |
[^ A-z] | Znak osim s a do z |
[A-Z] | Znak između (uključujući) od A do Z |
. | Bilo koji pojedinačni znak |
\ s | Bilo koji znak praznine |
\ S | Bilo koji znak bez razmaka |
\ d | Bilo koja znamenka 0 do 9 |
\ D | Bilo koja ne-znamenka |
\ w | Bilo koji znak riječi (slovo, broj i donja crta) |
\ W | Bilo koji znak koji nije riječ |
(…) | Snimite sve priloženo |
(A | b) | Podudaraju se s a ili b |
? | Znak a je odsutan ili je prisutan jedno vrijeme |
A * | Znak a je odsutan ili prisutan više puta |
+ | Znak a prisutan je jedan ili više puta |
a 3 | 3 uzastopna pojavljivanja karaktera |
a 3 | 3 ili više pojava karaktera uzastopno |
a 3,6 | 3 do 6 pojava karaktera uzastopno |
^ | Početak niza |
$ | Kraj niza |
\ b | Granica riječi. Ako je znak znak riječi za posljednju ili prvu riječ ili Ako je znak između riječi ili ne-riječi |
\ B | Granica bez riječi |