Ați dorit întotdeauna să învățați expresii regulate, dar ați fost lăsați de complexitatea lor? În acest articol, vă voi arăta cinci trucuri RegEx ușor de învățat pe care le puteți începe să utilizați imediat în editorul dvs. de text preferat.
Configurare editor text
În timp ce aproape orice editor de text acceptă expresii regulate acum, voi folosi Visual Studio Code pentru acest tutorial, dar puteți utiliza orice editor doriți. De asemenea, rețineți că, de obicei, trebuie să activați RegEx undeva lângă intrarea de căutare. Iată cum faceți acest lucru în VS Code:

1) .
– Potrivește orice personaj
Să începem simplu. Simbolul punct .
se potrivește cu orice personaj:
b.t

Deasupra meciurilor RegEx "bot”
, "bat”
și orice alt cuvânt de trei caractere care începe cu b
și se termină în t
. Dar dacă doriți să căutați simbolul punct, trebuie să îl scăpați cu , deci acest RegEx se va potrivi doar cu textul exact
"b.t"
:
b.t

2). * – Potriviți orice
Aici .
mijloace „Orice personaj” și *
mijloace „Orice înainte de acest simbol s-a repetat de nenumărate ori”. Împreună (.*
) înseamnă „Orice simbol de câte ori”. Îl puteți folosi, de exemplu, pentru a găsi potriviri care încep sau se termină cu un text. Să presupunem că avem o metodă javascript cu următoarea semnătură:
loadScript(scriptName: string, pathToFile: string)
Și vrem să găsim toate apelurile acestei metode undepathToFile
indică orice fișier din dosar “lua”
. Puteți utiliza următoarea expresie regulată pentru aceasta:
loadScript.*lua
Care înseamnă, „Potriviți tot textul începând cu“loadScript”
urmat de orice până la ultima apariție a “lua”
„

loadScript.*lua: matches everything starting with "loadScript" and ending in "lua"
3)? – Meci non-lacom
?
simbol după .*
și alte secvențe RegEx înseamnă „potriviți cât mai puțin posibil”. Dacă vă uitați la imaginea anterioară, veți vedea textul respectiv “lua”
este văzut de două ori în fiecare meci și totul până la al doilea “lua”
a fost asortat. Dacă ai vrut să asortezi totul până la prima apariție a "lua"
în schimb, ați folosi următorul RegEx:
loadScript.*?lua
Care înseamnă, „Potrivește totul începând cu"loadScript"
urmat de orice până la prima apariție a "lua"
“

loadScript.*?lua: matches
totul începând cu loadScript și până la prima apariție a „lua”4) () $ – Capturați grupuri și referințe înapoi
Bine, acum putem asorta un text. Dar dacă vrem să schimbăm părți ale textului pe care le-am găsit? Pentru asta trebuie să folosim adesea grupuri de captură.
Să presupunem că ne-am schimbat loadScript
metoda și acum are nevoie brusc de un alt argument inserat între cele două argumente. Să numim acest nou argument id
, astfel încât noua semnătură a funcției ar trebui să arate astfel: loadScript(scriptName, id, pathToFile)
. Nu putem folosi caracteristica normală de înlocuire a editorului de text aici, dar o expresie regulată este exact ceea ce avem nevoie.

Mai sus puteți vedea rezultatul executării următoarei expresii regulate:
loadScript(.*?,.*?)
Care înseamnă: „Potrivește totul începând cu "loadScript("
urmat de orice până la primul ,
, apoi urmat de orice până la primul )
”
Singurele lucruri care ar putea părea ciudate aici pentru dvs. sunt simboluri. Sunt folosite pentru a scăpa de paranteze.
Trebuie să scăpăm de simboluri (
și )
deoarece sunt caractere speciale folosite de RegEx pentru a captura părți din textul potrivit. Dar trebuie să potrivim caracterele reale din paranteză.
În RegEx anterior, am definit două argumente ale apelului metodei noastre cu .*?
simboluri. Să facem fiecare dintre argumentele noastre separate grup de captură prin adăugarea (
și )
simboluri din jurul lor:
loadScript((.*?),(.*?))
Dacă rulați acest RegEx, veți vedea că nimic nu s-a schimbat. Acest lucru se datorează faptului că se potrivește cu același text. Dar acum ne putem referi la primul argument ca $1
iar la al doilea argument ca $2
. Aceasta se numește backreference și ne va ajuta să facem ceea ce dorim: adăugați un alt argument în mijlocul apelului:
Intrare căutare:
loadScript((.*?),(.*?))
Ceea ce înseamnă același lucru ca RegEx anterior, dar mapează argumente pentru a captura grupurile 1 și respectiv 2.
Înlocuiți intrarea:
loadScript($1,id,$2)
Care înseamnă „Înlocuiți fiecare text asociat cu text “loadScript(“
urmat de grupul de captură 1, “id”
, capturați grupul 2 și )
”. Rețineți că nu este nevoie să scăpați de paranteze în intrarea de înlocuire.

5) [ ] – Clasele de personaje
Puteți afișa caracterele pe care doriți să le potriviți într-o anumită poziție plasând [
and ]
simboluri în jurul acestor personaje. De exemplu, clasa [0-9]
se potrivește cu toate cifrele de la 0 la 9. De asemenea, puteți lista explicit toate cifrele: [0123456789]
– sensul este același. Puteți utiliza și liniuță cu litere, [a-z]
se va potrivi cu orice caracter latin cu litere mici,[A-Z]
se va potrivi cu orice caracter latin cu majuscule și [a-zA-Z]
se va potrivi cu ambele.
Puteți utiliza, de asemenea *
după o clasă de personaje la fel ca după .
, ceea ce înseamnă în acest caz: „Potriviți orice număr de apariții ale personajelor din această clasă”

Ultimul cuvant
Trebuie să știți că există mai multe arome RegEx. Cel pe care l-am discutat aici este motorul javascript RegEx. Majoritatea motoarelor moderne sunt similare, dar pot exista unele diferențe. De obicei, aceste diferențe includ caractere de evadare și semne de referință inversă.
Vă îndemn să vă deschideți editorul de text și să începeți să folosiți câteva dintre aceste trucuri chiar acum. Veți vedea că acum puteți finaliza multe sarcini de refactorizare mult mai repede decât înainte. Odată ce vă simțiți confortabil cu aceste trucuri, puteți începe să căutați mai multe expresii regulate.
Vă mulțumesc că ați citit articolul meu până la capăt. Adăugați clape dacă vi s-a părut util și abonați-vă pentru mai multe actualizări. Voi publica mai multe articole despre expresii regulate, javascript și programare în general.