Lihtsad RegExi trikid algajatele

Kas olete alati tahtnud regulaaravaldisi õppida, kuid jäite nende keerukusest heidutama? Selles artiklis näitan teile viit hõlpsasti õppivat RegExi nippi, mida saate kohe oma lemmiktekstiredaktoris kasutama hakata.

Tekstiredaktori seadistamine

Kuigi regulaaravaldisi toetab nüüd peaaegu iga tekstiredaktor, kasutan selle õpetuse jaoks Visual Studio koodi, kuid võite kasutada mis tahes redaktorit, mis teile meeldib. Pange tähele ka seda, et tavaliselt peate RegExi sisse lülitama kuskil otsingu sisendi lähedal. VS-koodis saate seda teha järgmiselt:

1) . - sobib mis tahes tähemärgiga

Alustame lihtsalt. Punkti sümbol .sobib mis tahes tähemärgiga:

b.t

Üle RegEx vasteid "bot”, "bat”ja mis tahes muu sõna kolm märki, mis algab bja lõpeb t. Kuid kui soovite punktisümbolit otsida, peate sellest põgenema \, nii et see RegEx sobib ainult täpse tekstiga "b.t":

b\.t

2). * - sobitage midagi

Siin .tähendab see "suvalist tähemärki" ja *tähendab "kõike, mis enne seda sümbolit kordub mitu korda". Koos ( .*) tähendavad nad „suvalist sümbolit mitu korda”. Selle abil saate näiteks leida vasteid, mis algavad või lõpevad tekstiga. Oletame, et meil on järgmise allkirjaga javascripti meetod:

loadScript(scriptName: string, pathToFile: string)

Ja me tahame leida kõik selle meetodi kõned, mis pathToFileosutavad kausta mis tahes failile “lua”. Selleks saate kasutada järgmist regulaaravaldist:

loadScript.*lua

Mis tähendab, et „sobitage kogu tekst algusega, “loadScript”millele järgneb kõik kuni viimase tekstini “lua”

3)? - Ahne matš

?Sümbol pärast .*ja mõned teised RegEx järjestuste abil "mängu nii vähe kui võimalik." Eelmist pilti vaadates näete, et “lua”igas kohtumises nähakse teksti kaks korda ja kõik kuni “lua”teiseni sobitati. Kui soovite kõik "lua"selle asemel asetada esimese esinemiseni, kasutaksite järgmist RegEx-i:

loadScript.*?lua

Mis tähendab, et "sobitage kõik algusega, "loadScript"millele järgneb kõik kuni esimese esinemiseni "lua""

4) () $ - rühmade ja taustreferentside jäädvustamine

Olgu, nüüd saame teksti sobitada. Aga mis siis, kui soovime leitud teksti osi muuta? Selleks peame sageli kasutama jäädvustusgruppe.

Oletame, et me muutsime oma loadScriptmeetodit ja nüüd vajab see järsku veel ühte argumenti, mis lisatakse selle kahe argumendi vahele. Olgu nimi uue argumendi id, et uue funktsiooni allkiri peaks välja nägema selline: loadScript(scriptName, id, pathToFile). Me ei saa siin oma tekstiredaktori tavalist asendamise funktsiooni kasutada, kuid regulaaravaldis on just see, mida me vajame.

Ülal näete järgmise regulaaravaldise käitamise tulemust:

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

Mis tähendab: "sobitage kõik algusega, "loadScript("millele järgneb kõik kuni esimeseni ,, seejärel järgneb kõik kuni esimeseni )"

Ainukesed asjad, mis võivad teie jaoks siin kummalised tunduda, on \sümbolid. Neid kasutatakse sulgudes pääsemiseks.

Peame põgenema sümbolitest (ja )kuna need on erimärgid, mida RegEx kasutab sobitatud teksti osade hõivamiseks. Kuid me peame sobitama tegelikud sulgudes olevad märgid.

Eelmises RegExis määratlesime oma meetodi kutse kaks argumenti .*?sümbolitega. Teeme iga meie argumendid eraldi hõiverü lisades (ja )sümboleid ümber:

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

Kui käivitate selle RegExi, näete, et midagi ei muutunud. Seda seetõttu, et see sobib sama tekstiga. Kuid nüüd saame esimesele argumendile viidata kui $1teisele argumendile $2. Seda nimetatakse tagasivaateks ja see aitab meil teha seda, mida tahame: lisage kõne keskele veel üks argument:

Otsingu sisend:

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

Mis tähendab sama, mis eelmine RegEx, kuid kaardistab argumendid vastavalt rühmade 1 ja 2 hõivamiseks.

Asenda sisend:

loadScript($1,id,$2)

Mis tähendab “asendage iga sobitatud tekst tekstiga, “loadScript(“millele järgneb 1. “id”tabamisrühm, 2. grupp ja )”. Pange tähele, et te ei pea asendussisendis sulgudes põgenema.

5) [] - märkide klassid

Nende märkide ümber asetades [ja ]sümbolid saate loetleda tähemärgid, mida soovite kindlal kohal sobitada . Näiteks [0-9]sobib klass kõigi numbritega 0 kuni 9. Võite ka kõik numbrid selgesõnaliselt loetleda: [0123456789]- tähendus on sama. Võite kasutada ka kriipsudega tähti, [a-z]sobib mis tahes väikeste ladina tähtedega, [A-Z]sobib mis tahes ladina ladina tähtedega ja [a-zA-Z]sobib mõlemaga.

Võite kasutada ka *pärast märkide klassi täpselt nagu pärast ., mis tähendab sel juhul: "sobitada mis tahes arvu selle klassi märkide esinemisi"

Viimane sõna

Peaksite teadma, et RegExi maitseid on mitu. Siit arutasin javascripti RegExi mootorit. Enamik kaasaegseid mootoreid on sarnased, kuid võib olla mõningaid erinevusi. Tavaliselt hõlmavad need erinevused põgenemismärke ja taustreferentide märke.

Kutsun teid üles oma tekstiredaktorit avama ja mõnda neist nippidest kohe kasutama hakkama. Näete, et saate nüüd palju refaktoreerimisülesandeid täita palju kiiremini kui varem. Kui olete nende trikkidega rahul, võite hakata rohkem uurima regulaaravaldiste kohta.

Täname, et lugesite minu artiklit lõpuni. Lisage plaksutusi, kui see on teile kasulik, ja tellige rohkem värskendusi. Avaldan rohkem artikleid regulaaravaldiste, javascripti ja üldiselt programmeerimise kohta.