Jednostavni RegEx trikovi za početnike

Uvijek ste željeli naučiti Regularne izraze, ali zaprepastila ih je njihova složenost? U ovom članku pokazat ću vam pet trikova RegEx koji se lako nauče i koje odmah možete početi koristiti u svom omiljenom uređivaču teksta.

Postavljanje uređivača teksta

Iako gotovo bilo koji uređivač teksta sada podržava Regularne izraze, za ovaj ću vodič koristiti Visual Studio Code, ali možete koristiti bilo koji uređivač koji želite. Također imajte na umu da obično trebate uključiti RegEx negdje u blizini unosa za pretraživanje. Evo kako se to radi u VS kodu:

1) . - Podudaranje s bilo kojim znakom

Krenimo jednostavno. Simbol točke .odgovara bilo kojem znaku:

b.t

Iznad regex utakmice "bot”, "bat”i bilo koja druga riječ od tri znaka koja počinje bi završava u t. Ali ako želite potražiti simbol točkice, morate ga pobjeći s \, tako da će ovaj RegEx odgovarati samo točnom tekstu "b.t":

b\.t

2). * - Podudaranje bilo čega

Ovdje .znači "bilo koji znak" i *znači "bilo što prije nego što se ovaj simbol ponovi bilo koji broj puta." Zajedno ( .*) znače "bilo koji simbol bilo koji broj puta." Pomoću njega možete, na primjer, pronaći podudaranja koja počinju ili završavaju u nekom tekstu. Pretpostavimo da imamo metodu javascript sa sljedećim potpisom:

loadScript(scriptName: string, pathToFile: string)

I želimo pronaći sve pozive ove metode gdje pathToFileupućuju na bilo koju datoteku u mapi “lua”. Za to možete koristiti sljedeći Regularni izraz:

loadScript.*lua

Što znači, "uskladite sav tekst koji započinje s “loadScript”bilo čime do zadnjeg pojavljivanja “lua”"

3)? - Nepohlepna utakmica

?Simbol nakon .*i neki drugi regex sekvence znači „Utakmica što je manje moguće.” Ako pogledate prethodnu sliku, vidjet ćete da se tekst “lua”vidi dva puta u svakom meču i da “lua”se podudara sve do druge . Ako "lua"umjesto toga želite uporediti sve do prvog pojavljivanja , koristili biste sljedeći RegEx:

loadScript.*?lua

Što znači, "uskladite sve, počevši sa, "loadScript"slijedi bilo što do prve pojave "lua""

4) () $ - Hvatanje grupa i povratne reference

Dobro, sad možemo uskladiti neki tekst. Ali što ako želimo promijeniti dijelove teksta koji smo pronašli? Za to se često moramo koristiti skupine za hvatanje.

Pretpostavimo da smo promijenili našu loadScriptmetodu i sada joj odjednom treba još jedan argument umetnut između svoja dva argumenta. Neka se ime taj novi argument id, tako da je nova funkcija potpis bi trebao izgledati ovako: loadScript(scriptName, id, pathToFile). Ovdje ne možemo koristiti značajku normalne zamjene našeg uređivača teksta, ali Regularni izraz je upravo ono što nam treba.

Iznad možete vidjeti rezultat pokretanja sljedećeg redovnog izraza:

loadScript\(.*?,.*?\)

Što znači: "uskladite sve počevši od "loadScript("čega slijedi bilo što do prvog ,, a zatim slijedi bilo što do prvog )"

Jedine stvari koje bi vam se ovdje mogle činiti čudne su \simboli. Koriste se za izlazak iz zagrada.

Moramo pobjeći od simbola (i )zato što su to posebni znakovi koje RegEx koristi za hvatanje dijelova podudarnog teksta. Ali moramo podudarati stvarne znakove u zagradama.

U prethodnom RegExu definirali smo dva argumenta poziva naše metode sa .*?simbolima. Neka svaki od naših argumenata bude zasebna grupa za hvatanje dodavanjem (i )simbolima oko njih:

loadScript\((.*?),(.*?)\)

Ako pokrenete ovaj RegEx, vidjet ćete da se ništa nije promijenilo. To je zato što se podudara s istim tekstom. Ali sada se na prvi argument možemo pozivati ​​kao, $1a na drugi argument kao $2. To se naziva povratnim pozivanjem i ono će nam pomoći da radimo ono što želimo: dodajte još jedan argument usred poziva:

Unos pretraživanja:

loadScript\((.*?),(.*?)\)

Što znači isto što i prethodni RegEx, ali preslikava argumente kako bi obuhvatili skupine 1 odnosno 2.

Zamijeni unos:

loadScript($1,id,$2)

Što znači "svaki odgovarajući tekst zamijenite tekstom “loadScript(“nakon kojeg slijedi grupa za “id”hvatanje 1 ),, grupa za hvatanje 2 i ". Imajte na umu da u zamjenskom ulazu ne morate izbjegavati zagrade.

5) [] - Razredi likova

Možete navesti znakove kojima želite da se podudaraju na određenom mjestu postavljanjem [i ]simbolima oko tih znakova. Na primjer, klasa [0-9]odgovara svim znamenkama od 0 do 9. Sve znamenke možete i izričito navesti: [0123456789]- značenje je isto. Možete koristiti crticu i sa slovima, [a-z]odgovarat će bilo kojem malom latiničnom znaku, [A-Z]odgovarati bilo kojem velikom latiničnom znaku i [a-zA-Z]odgovarat će oba.

Također možete koristiti *nakon klase znakova, kao i nakon ., što u ovom slučaju znači: "podudaranje s bilo kojim brojem pojavljivanja znakova u ovoj klasi"

Zadnja riječ

Trebali biste znati da postoji nekoliko RegEx okusa. Ovdje sam razgovarao o javascript RegEx mehanizmu. Većina modernih motora su slični, ali možda postoje neke razlike. Te razlike obično uključuju izlazne znakove i oznake za povratne reference.

Pozivam vas da otvorite svoj uređivač teksta i počnete koristiti neke od ovih trikova odmah. Vidjet ćete da sada mnoge zadatke refaktoriranja možete izvršiti mnogo brže nego prije. Jednom kada se ugodno odlučite za ove trikove, možete početi istraživati ​​više regularne izraze.

Hvala vam što ste pročitali moj članak do kraja. Dodajte pljeske ako vam se učinilo korisnim i pretplatite se na još ažuriranja. Objavit ću još članaka o regularnim izrazima, javascriptu i programiranju općenito.