Regularni izrazi u JavaScriptu. Ekspresivni JavaScript: regularni izrazi Rad s regularnim izrazima u javascriptu

💖 Sviđa li vam se? Podijelite vezu sa svojim prijateljima

Regularni izrazi omogućuju vam fleksibilno pretraživanje riječi i izraza u tekstovima kako biste ih izbrisali, izdvojili ili zamijenili.

Sintaksa:

//Prva opcija za stvaranje regularnog izraza var regexp=new RegExp( uzorak,modifikatori); //Druga opcija za stvaranje regularnog izraza var regexp=/ uzorak/modifikatori;

uzorak omogućuje vam da odredite uzorak znakova za pretraživanje.

modifikatori omogućuju vam da prilagodite ponašanje pretraživanja:

  • ja- pretraživanje bez uzimanja u obzir veličine slova;
  • g- globalno pretraživanje (pronaći će se sva podudaranja u dokumentu, ne samo prva);
  • m- pretraživanje u više redaka.

Tražite riječi i izraze

Najjednostavnija upotreba regularnih izraza je traženje riječi i izraza u različitim tekstovima.

Evo primjera korištenja pretraživanja pomoću modifikatora:

//Postavimo regularni izraz rv1 rv1=/Rusija/; //Navedite regularni izraz rv2 rv2=/Rusija/g; //Navedite regularni izraz rv3 rv3=/Rusija/ig; //Podebljano označava gdje će se naći podudaranja u tekstu kada se koristi //izraz rv1: Rusija je najveća država na svijetu. Rusija graniči sa 18 zemalja. RUSIJA je država nasljednica SSSR-a. //Podebljano označava gdje će se naći podudaranja u tekstu kada se koristi //izraz rv2: Rusija je najveća država na svijetu. Rusija graniči sa 18 zemalja. RUSIJA je država nasljednica SSSR-a."; //Podebljani font označava gdje će se naći podudaranja u tekstu kada se koristi //izraz rv3: Rusija je najveća država na svijetu. Rusija graniči s 18 zemalja. RUSIJA je država nasljednica SSSR-a.";

Posebni simboli

Uz regularne znakove, mogu se koristiti i obrasci regularnih izraza Posebni simboli(metaznakovi). Posebni znakovi s opisima prikazani su u donjoj tablici:

Poseban karakter Opis
. Odgovara bilo kojem znaku osim znaku za kraj retka.
\w Odgovara bilo kojem abecednom znaku.
\W Odgovara bilo kojem neabecednom znaku.
\d Odgovara znakovima koji su brojevi.
\D Odgovara znakovima koji nisu brojevi.
\s Odgovara razmacima.
\S Odgovara znakovima koji nisu razmaci.
\b Podudaranja će se pronaći samo na granicama riječi (na početku ili na kraju).
\B Podudaranja će se tražiti samo na granicama koje nisu riječi.
\n Odgovara znaku novog retka.

/* Izraz reg1 će pronaći sve riječi koje počinju s dva proizvoljna slova i završavaju s "vet". Budući da su riječi u rečenici odvojene razmakom, dodat ćemo poseban znak \s na početku i na kraju */ reg1=/\s..vet\s/g; txt="zdravo covenant samt ormar"; document.write(txt.match(reg1) + "
"); /* Izraz reg2 će pronaći sve riječi koje počinju s tri proizvoljna slova i završavaju s "vet" */ reg2=/\s...vet\s/g; document.write(txt.match(reg2) + "
"); txt1=" hi2hello hi 1hello "; /* Izraz reg3 će pronaći sve riječi koje počinju s "at" nakon čega slijedi 1 znamenka i završavaju s "vet" */ var reg3=/at\dvet/g; document . napiši(txt1.match(reg3) + "
"); // Izraz reg4 će pronaći sve brojeve u tekstu var reg4=/\d/g; txt2="5 godina učenja, 3 godine jedrenja, 9 godina snimanja." document.write(txt2. match(reg4) + "
");

Brzi pogled

Simboli u uglatim zagradama

Korištenje uglatih zagrada [ključ] Možete odrediti grupu znakova za pretraživanje.

Znak ^ ispred grupe znakova u uglatim zagradama [^kwg] označava da morate tražiti sve znakove abecede osim navedenih.

Korištenje crtice (-) između znakova u uglatim zagradama [a-z] Možete odrediti raspon znakova za pretraživanje.

Također možete tražiti brojeve pomoću uglatih zagrada.

//Postavi regularni izraz reg1 reg1=/\sko[tdm]\s/g; //Postavi tekstualni niz txt1 txt1=" cat braid code komoda com tepih "; //Koristeći regularni izraz reg1, potražite niz txt1 document.write(txt1.match(reg1) + "
"); reg2=/\sslo[^tg]/g; txt2=" slot slot slog "; document.write(txt2.match(reg2) + "
"); reg3=//g; txt3="5 godina učenja, 3 godine plivanja, 9 godina gađanja"; document.write(txt3.match(reg3));

Brzi pogled

Kvantifikatori

Kvantifikator- ovo je konstrukcija koja vam omogućuje da odredite koliko puta se prethodni znak ili grupa znakova trebaju pojaviti u podudaranju.

Sintaksa:

//Prethodni znak mora se pojaviti x - puta (x)//Prethodni znak mora se pojaviti od x do y uključivo puta (x,y)//Prethodni znak mora se pojaviti najmanje x puta (x,)//Određuje da se prethodni znak mora pojaviti 0 ili više puta * //Određuje da se prethodni znak mora pojaviti 1 ili više puta + //Određuje da se prethodni znak mora pojaviti 0 ili 1 put ?


//Navedite regularni izraz rv1 rv1=/ko(5)shka/g //Navedite regularni izraz rv2 rv2=/ko(3,)shka/g //Navedite regularni izraz rv3 rv3=/ko+shka/g //Navedite regularni izraz rv4 rv4=/ko?shka/g //Postavite regularni izraz rv5 rv5=/ko*shka/g //Podebljani font pokazuje gdje će se u tekstu pronaći podudaranja kada se koristi //izraz rv1: kshka cat kooshka koooshka kooooshka kooooshka kooooooshka kooooooshka //Podebljano označava gdje će se u tekstu pronaći podudaranja kada se koristi //rv2 izraz: kshka cat kooshka kooooška kooooška kooooooška kooooooška kooooooška//Podebljano označava gdje će se u tekstu pronaći podudaranja kada se koristi //izraz rv3: kshka mačka kooška kooooška kooooška kooooška kooooooška kooooooška//Podebljano označava gdje će se u tekstu naći podudaranja kada se koristi //rv4 izraz: kshka cat kooshka koooshka kooooshka koooooshka koooooshka kooooooshka //Podebljano označava gdje će se u tekstu pronaći podudaranja kada se koristi //rv5 izraz: kshka cat kooshka kooooshka kooooshka kooooshka kooooooshka kooooooshka

Bilješka: ako želite koristiti bilo koji poseban znak (kao što je . * + ? ili ()) kao uobičajeni znak, morate staviti \ ispred njega.

Korištenje zagrada

Stavljanjem dijela uzorka regularnog izraza u zagrade, govorite izrazu da zapamti podudaranje koje je pronašao taj dio uzorka. Spremljeno podudaranje možete koristiti kasnije u svom kodu.

Na primjer, regularni izraz /(Dmitry)\sVasiliev/ će pronaći niz "Dmitry Vasiliev" i zapamtiti podniz "Dmitry".

U donjem primjeru koristimo metodu replace() za promjenu redoslijeda riječi u tekstu. Koristimo $1 i $2 za pristup pohranjenim podudaranjima.

Var regexp = /(Dmitry)\s(Vasiliev)/; var text = "Dmitrij Vasiljev"; var newtext = text.replace(regexp, "$2 $1"); document.write(novitekst);

Brzi pogled

Zagrade se mogu koristiti za grupiranje znakova prije kvantifikatora.

Ovaj članak pokriva osnove korištenja regularnog izraza u Javascriptu.

Uvod

Što je regularni izraz?

JS regularni izraz je niz znakova koji tvori pravilo pretraživanja. Ovo se pravilo zatim može koristiti za pretraživanje teksta, kao i za njegovu zamjenu. U praksi se regularni izraz može čak sastojati od jednog znaka, ali složeniji uzorci pretraživanja su češći.

U Javascriptu, regularni izrazi također su objekti. To su obrasci koji se koriste za podudaranje nizova znakova u nizovima. Koriste se u metodama exec() i test() objekta RegExp, te u metodama match(), replace(), search i split() objekta String.

Primjer

var pattern = /example/i

/example/i je regularni izraz. primjer je predložak ( koji će se koristiti u pretrazi). i je modifikator koji pokazuje osjetljivost na velika i mala slova.

Priprema regularnog izraza

JS regularni izrazi sastoje se od uzorka i modifikatora. Sintaksa će biti otprilike ovakva:

/uzorak/modifikatori;

Predložak navodi pravilo pretraživanja. Sastoji se od jednostavnih znakova poput /abc/ ili kombinacije jednostavnih i posebnih znakova: /abc/ ili /Chapter (d+).d/ .

Tablica predloška

Modifikatori vam omogućuju da upiti budu osjetljivi na velika i mala slova, globalni i tako dalje. Koriste se za provođenje pretraživanja osjetljivih na velika i mala slova, kao i za globalna pretraživanja.

Tablica modifikatora

Sada smo spremni primijeniti JS regularne izraze. Postoje dva glavna načina za to: korištenje regularnog izraza objekta ili regularnog izraza na nizu.

Korištenje objekta regularnog izraza

Stvorite objekt regularnog izraza

Ovaj objekt opisuje uzorak znakova. Koristi se za usklađivanje uzoraka. Postoje dva načina za konstruiranje objekta regularnog izraza.

Metoda 1: Upotreba literala regularnog izraza koji se sastoji od uzorka omeđenog kosim crtama, na primjer:

var reg = /ab+c/;

Literali regularnog izraza pokreću predkompilaciju regularnog izraza kada se skripta analizira. Ako je regularni izraz konstantan, upotrijebite ga za poboljšanje izvedbe.

Metoda 2: Pozivanje funkcije konstruktora objekta RegExp, na primjer:

var reg = new RegExp("ab+c");

Korištenje konstruktora omogućuje kompajliranje regularnog izraza JS dok se skripta izvodi. Koristiti ovu metodu, ako će se regularni izraz promijeniti ili ne znate uzorak unaprijed. Na primjer, ako primite informacije od korisnika koji unese upit za pretraživanje.

Objektne metode regularnog izraza

Pogledajmo nekoliko uobičajenih metoda objekta regularnih izraza:

  • sastaviti() ( zastarjelo u verziji 1.5) – kompilira regularni izraz;
  • exec() - Izvodi podudaranje niza. Vraća prvu utakmicu;
  • test() - izvodi podudaranje niza. Vraća true ili false;
  • toString() – vraća vrijednost niza regularnog izraza.

Primjeri

Korištenje test()

Metoda test() regularni je izraz RegExp objekta. Traži uzorak niza i vraća true ili false ovisno o rezultatu. Sljedeći primjer JS regularnog izraza pokazuje kako se niz traži za znak " e”:

var patt = /e/; patt.test("Najbolje stvari na svijetu su besplatne!");

Budući da ovdje u retku postoji " e“, rezultat ovog koda bit će istinit.

Regularni izrazi ne moraju biti smješteni u varijablu. Isti upit može se napraviti u jednom redu:

/e/.test("Najbolje stvari na svijetu su besplatne!");

Korištenje exec()

Pretražuje niz koristeći zadano pravilo pretraživanja i vraća pronađeni tekst. Ako nisu pronađeni rezultati, rezultat će biti nula.

Pogledajmo metodu na djelu, koristeći primjer istog simbola “ e”:

/e/.exec("Najbolje stvari na svijetu su besplatne!");

Budući da linija sadrži " e”, rezultat ovog koda će biti .e .

Primjena regularnog izraza na string

U Javascriptu se ovi izrazi također mogu koristiti s dvije metode objekta String: search() i replace(). Oni su potrebni za traženje i zamjenu u tekstu.

  • metoda search() - koristi izraz za traženje podudaranja i vraća informacije o lokaciji podudaranja;
  • Metoda replace() vraća modificirani niz sa zamijenjenim uzorkom.

Primjeri

Korištenje JS regularnog izraza za izvođenje pretraživanja osjetljivog na velika i mala slova za izraz " w3skole" u redu:

var str = "Posjetite W3Schools"; var n = str.search(/w3schools/i);

Rezultat u n će biti 6.

Metoda pretraživanja također uzima niz kao argument. Argument niza bit će pretvoren u regularni izraz:

Korištenje niza za traženje izraza " W3schools" u redu.

U JavaScriptu su regularni izrazi predstavljeni RegExp objektima. RegExp objekti mogu se stvoriti pomoću RegExp() konstruktora, ali češće se stvaraju pomoću posebne sintakse literala. Baš kao što su string literali navedeni kao znakovi u navodnicima, regularni izrazni literali navedeni su kao znakovi u paru kose crte /.

/pattern/flags novi RegExp("uzorak"[, opcije pretraživanja])

uzorak- regularni izraz za pretraživanje (više o zamjeni kasnije), i zastavice - niz bilo koje kombinacije znakova g (globalno pretraživanje), i (velika i mala slova nisu bitna) i m (pretraživanje u više redaka). Prva metoda se koristi često, druga - ponekad. Na primjer, dva takva poziva su ekvivalentna.

Opcije pretraživanja

Prilikom izrade regularnog izraza možemo odrediti dodatne opcije pretraživanja

Znakovi u JavaScript regularnim izrazima

SimbolDopisivanje
Alfanumerički znakoviOdgovaraju sami sebi
\0 NUL znak (\u0000)
\tKartica (\u0009)
\nPomicanje retka (\u000A)
\vOkomiti jezičak (\u000B)
\fPrijevod stranice (\u000C)
\rPovratak kolekcija (\u000D)
\xnnZnak iz latinskog skupa, određen heksadecimalnim brojem nn; na primjer, \x0A je isto što i \n
\uxxxxUnicode znak određen heksadecimalnim brojem xxxx; na primjer, \u0009 je isto što i \t
\cXKontrolni znak "X", na primjer, niz \cJ je ekvivalentan znaku novog retka \n
\ Za obične likove - čini ih posebnima. Na primjer, izraz /s/ jednostavno traži znak "s". A ako stavite \ ispred s, tada /\s/ već označava znak za razmak i obrnuto, ako je znak poseban, na primjer *, tada će to biti samo obični znak "zvjezdica". Na primjer, /a*/ traži 0 ili više uzastopnih znakova "a". Da biste pronašli sa zvjezdicom "a*" - stavite \ ispred posebnog. simbol: /a\*/ .
^ Označava početak ulaznih podataka. Ako je postavljena zastavica višerednog pretraživanja ("m"), također će se aktivirati na početku novog retka. Na primjer, /^A/ neće pronaći "A" u "an A", ali će pronaći prvi "A" u "An A."
$ Označava kraj ulaznih podataka. Ako je postavljena zastavica višerednog pretraživanja, također će raditi na kraju retka, na primjer, /t$/ neće pronaći "t" u "eater", ali će ga pronaći u "eat".
* Označava ponavljanje 0 ili više puta. Na primjer, /bo*/ će pronaći "boooo" u "A ghost boooooed" i "b" u "A bird warbled", ali neće pronaći ništa u "A goat grunted".
+ Označava ponavljanje 1 ili više puta. Ekvivalentno (1,). Na primjer, /a+/ odgovarat će "a" u "slatkiši" i svim "a" u "caaaaaaandy".
? Pokazuje da element može, ali i ne mora biti prisutan. Na primjer, /e?le?/ će odgovarati "el" u "anđeo" i "le" u "kut." Ako se koristi odmah nakon jednog od kvantifikatora * , + , ? , ili () , tada specificira "nepohlepno" pretraživanje (ponavljajući najmanji mogući broj puta, do najbližeg sljedećeg elementa uzorka), za razliku od zadanog "pohlepnog" načina, koji maksimizira broj ponavljanja, čak i ako sljedeći element uzorka također odgovara, ? koristi se u pretpregledu, što je opisano u tablici pod (?=) , (?!) i (?:) .
. (Decimalna točka) predstavlja bilo koji znak osim novog retka: \n \r \u2028 ili \u2029. (možete koristiti [\s\S] za traženje bilo kojeg znaka, uključujući nove retke). Na primjer, /.n/ će odgovarati "an" i "on" u "ne, jabuka je na drvetu", ali ne i "ne".
(x)Pronalazi x i pamti. To se zove "memorijski okviri". Na primjer, /(foo)/ će pronaći i zapamtiti "foo" u "foo traci." Pronađeni podniz pohranjuje se u polje rezultata pretraživanja ili u unaprijed definirana svojstva objekta RegExp: $1, ..., $9. Osim toga, zagrade kombiniraju ono što je sadržano u njima u jedan element uzorka. Na primjer, (abc)* - ponovite abc 0 ili više puta.
(?:x)Pronalazi x, ali se ne sjeća što je pronašao. To se naziva "memorijske zagrade". Pronađeni podniz nije pohranjen u svojstvu rezultata i RegExp-a. Kao i sve zagrade, oni kombiniraju ono što je u njima u jedan poduzorak.
x(?=y)Pronalazi x samo ako iza x slijedi y. Na primjer, /Jack(?=Sprat)/ odgovara samo "Jack" ako slijedi "Sprat". /Jack(?=Sprat|Frost)/ će odgovarati samo "Jack" ako slijedi "Sprat" ili "Frost". Međutim, ni "Sprat" ni "Frost" neće se pojaviti u rezultatima pretraživanja.
x(?!y)Pronalazi x samo ako iza x ne slijedi y. Na primjer, /\d+(?!\.)/ odgovara samo broju ako iza njega ne slijedi decimalna točka. /\d+(?!\.)/.exec("3.141") će pronaći 141, ali ne i 3.141.
x|yPronalazi x ili y. Na primjer, /zeleno|crveno/ odgovarat će "zeleno" u "zelena jabuka" i "crveno" u "crvena jabuka."
(n)Gdje je n pozitivan cijeli broj. Pronalazi točno n ponavljanja prethodnog elementa. Na primjer, /a(2)/ neće pronaći "a" u "candy," ali će pronaći oba a u "caandy," i prva dva a u "caaandy."
(n,)Gdje je n pozitivan cijeli broj. Pronalazi n ili više ponavljanja elementa. Na primjer, /a(2,) neće pronaći "a" u "bomboni", ali će pronaći sve "a" u "caandy" i u "caaaaaaandy."
(n,m)Gdje su n i m pozitivni cijeli brojevi. Nađi od n do m ponavljanja elementa.
Skup znakova. Pronalazi bilo koji od navedenih likova. Razmak možete označiti pomoću crtice. Na primjer, - isto što i . Odgovara "b" u "brisket" i "a" i "c" u "ache".
[^xyz]Bilo koji znak osim onih navedenih u skupu. Također možete odrediti raspon. Na primjer, [^abc] je isto što i [^a-c] . Pronalazi "r" u "brisket" i "h" u "chop".
[\b]Pronalazi znak povratnice. (Ne smije se brkati s \b .)
\bPronalazi (latinsku) granicu riječi, kao što je razmak. (Ne smije se brkati s [\b]). Na primjer, /\bn\w/ odgovarat će "ne" u "podne"; /\wy\b/ će pronaći "ly" u "possibly yesterday."
\BNe označava granicu riječi. Na primjer, /\w\Bn/ će odgovarati "on" u "noonday", a /y\B\w/ će odgovarati "ye" u "possibly yesterday."
\cXGdje je X slovo od A do Z. Označava kontrolni znak u nizu. Na primjer, /\cM/ predstavlja znak Ctrl-M.
\dpronalazi broj iz bilo koje abecede (naš je Unicode). Koristite za pronalaženje samo uobičajenih brojeva. Na primjer, /\d/ ili // odgovarat će "2" u "B2 je broj apartmana."
\DPronalazi nenumerički znak (sva slova). [^0-9] je ekvivalent za obične brojeve. Na primjer, /\D/ ili /[^0-9]/ odgovarat će "B" u "B2 je broj apartmana."
\sPronalazi bilo koji razmak, uključujući razmak, tabulator, novi red i druge Unicode znakove razmaka. Na primjer, /\s\w*/ odgovarat će "bar" u "foo bar."
\SPronalazi bilo koji znak osim razmaka. Na primjer, /\S\w*/ odgovarat će "foo" u "foo traci."
\vOkomiti tabulator.
\wPronalazi bilo koju riječ (latiničko pismo), uključujući slova, brojeve i podvlake. Ekvivalent. Na primjer, /\w/ će odgovarati "a" u "jabuka," "5" u "$5.28," i "3" u "3D."
\WPronalazi bilo koji ne-(latinski) verbalni znak. Ekvivalent [^A-Za-z0-9_] . Na primjer, /\W/ i /[^$A-Za-z0-9_]/ jednako će odgovarati "%" u "50%."

Rad s regularnim izrazima u Javascriptu

Rad s regularnim izrazima u Javascriptu implementiran je metodama klase String

exec(regexp) - pronalazi sva podudaranja (unosi u regularnom uzorku) u nizu. Vraća polje (ako postoji podudaranje) i ažurira svojstvo regularnog izraza ili null ako ništa nije pronađeno. S modifikatorom g - svaki put kada se ova funkcija pozove, vratit će sljedeće podudaranje nakon prethodno pronađenog - ovo se implementira održavanjem indeksa pomaka zadnjeg pretraživanja.

match(regexp) - pronađite dio niza pomoću uzorka. Ako je naveden modifikator g, tada match() vraća niz svih podudaranja ili null (umjesto praznog niza). Bez modifikatora g ova funkcija radi kao exec();

test(regexp) - funkcija provjerava podudaranje niza s uzorkom. Vraća true ako postoji podudaranje i false ako nema podudaranja.

split(regexp) - Dijeli niz koji je pozvan u niz podnizova, koristeći argument kao graničnik.

replace(regexp, mix) - metoda vraća modificirani niz u skladu s predloškom (regularni izraz). Prvi parametar za regexp također može biti niz, a ne regularni izraz. Bez modifikatora g, metoda u retku zamjenjuje samo prvo pojavljivanje; s modifikatorom g - dolazi do globalne zamjene, tj. sva pojavljivanja u datom retku se mijenjaju. mix - zamjenski predložak, može prihvatiti vrijednosti niza, zamjenski predložak, funkcija (naziv funkcije).

Posebni znakovi u zamjenskom nizu

Zamjena preko funkcije

Ako navedete funkciju kao drugi parametar, ona se izvršava za svako podudaranje. Funkcija može dinamički generirati i vratiti zamjenski niz. Prvi parametar funkcije je pronađeni podniz. Ako je prvi argument za zamjenu RegExp objekt, tada sljedećih n parametara sadrži ugniježđene podudaranja zagrada. Posljednja dva parametra su pozicija u liniji gdje je došlo do podudaranja i sama linija.

novi RegExp(uzorak[, zastavice])

regularni izraz ADVANCE

Poznato je da poželjna je doslovna sintaksa(/test/i).

Ako regularni izraz nije unaprijed poznat, tada je poželjno stvoriti regularni izraz (u znakovnom nizu) pomoću konstruktora (novi RegExp).

Ali obratite pozornost, budući da "znak kose crte" \ igra ulogu prebacivanja koda, mora se dvaput napisati u literalu niza (novi RegExp): \\

Zastave

ignoriram velika i mala slova prilikom sparivanja

g globalno podudaranje, za razliku od lokalnog podudaranja (prema zadanim postavkama, odgovara samo prvoj instanci uzorka), dopušta podudaranje svih instanci uzorka

Operatori

Što Kako Opis Korištenje
ja zastava radi reg. izraz koji ne razlikuje velika i mala slova /testik/i
g zastava globalna pretraga /testik/g
m zastava omogućuje uparivanje s mnogim nizovima koji se mogu dobiti iz textarea
operator klase znakova podudaranje skupa znakova - bilo koji znak u rasponu od a do z;
^ operator umetanja osim [^a-z] - bilo koji znak OSIM znakova u rasponu od a do z;
- operator crtice navesti raspon vrijednosti, uključujući - bilo koji znak u rasponu od a do z;
\ operater za bijeg izbjegava svaki sljedeći znak \\
^ start matching operator podudaranje uzoraka mora se dogoditi na početku /^testik/g
$ operator kraja podudaranja slaganje uzoraka trebalo bi se dogoditi na kraju /testik$/g
? operater? čini znak neobveznim /t?test/g
+ operater + /t+est/g
+ operater + simbol mora biti prisutan jednom ili više puta /t+est/g
* operater * simbol mora biti prisutan jednom ili više puta ili ga uopće nema /t+est/g
{} operater() postavite fiksni broj ponavljanja znakova /t(4)est/g
{,} operater (,) postaviti broj ponavljanja simbola unutar određenih granica /t(4,9)est/g

Predefinirane klase znakova

Predefinirani član Usporedba
\t horizontalni jezičak
\n Linijski prijevod
. Bilo koji znak osim prelaska retka
\d Bilo koja deseta znamenka, koja je ekvivalentna
\D Bilo koji znak osim desete znamenke, koja je ekvivalentna [^0-9]
\w Svaki znak (brojevi, slova i podvlake) koji je ekvivalentan
\W Bilo koji znak osim brojeva, slova i podvlaka, koji je ekvivalentan [^A-Za-z0-9]
\s Bilo koji prostorni znak
\S Bilo koji znak osim razmaka
\b Granica riječi
\B NIJE granica riječi, već njezina unutrašnjost. Dio

Grupiranje()

Ako želite primijeniti operator kao što je + (/(abcd)+/) na grupu članova, možete koristiti zagrade () .

Fiksacije

Poziva se dio regularnog izraza unutar zagrada (). fiksacija.

Razmotrite sljedeći primjer:

/^()k\1/

\1 nije bilo koji znak iz a, b, c.
\1 je bilo koji znak koji inicira odgovara prvom znaku. To jest, znak koji se podudara s \1 nepoznat je dok se regularni izraz ne razriješi.

Nefiksirane grupe

Zagrade () se koriste u 2 slučaja: za grupiranje i za označavanje fiksacija. Ali postoje situacije kada trebamo koristiti () samo za grupiranje, budući da commitovi nisu potrebni, osim toga, uklanjanjem nepotrebnih commitova olakšavamo mehanizam obrade regularnih izraza.

Tako da spriječiti fiksaciju Prije uvodne zagrade potrebno je staviti: ?:

str = "

zdravo svijet!
"; pronađeno = str.match(/<(?:\/?)(?:\w+)(?:[^>]*?)>/i); console.log("pronađeno bez popravka: ", pronađeno); // [ "
" ]

testna funkcija

Regexp.test()

Funkcija testa provjerava odgovara li regularni izraz nizu (str). Vraća true ili false.

Primjer upotrebe:

Javascript

funkcija codeF(str)( return /^\d(5)-\d(2)/.test(str); ) //console.log(codeF("12345-12ss")); // istina //console.log(codeF("1245-12ss")); // lažno

funkcija podudaranja

str.match(regexp)

Funkcija podudaranja vraća niz vrijednosti ili null ako nisu pronađena podudaranja. Ček: ako regularni izraz nema oznaku g (za izvođenje globalne pretrage), tada će metoda podudaranja vratiti prvo podudaranje u nizu i, kao što se može vidjeti iz primjera, u nizu podudaranja FIKSACIJE pad(dio regularnog izraza u zagradama).

Javascript

str = "Za informacije, molimo pogledajte: Poglavlje 3.4.5.1"; re = /chapter (\d+(\.\d)*)/i // s obvezama (bez globalne oznake) pronađeno = str.match(re) console.log(found); // ["Poglavlje 3.4.5.1", "3.4.5.1", ".1"]

Ako navedete metodu match() s globalnim regularnim izrazom (sa zastavom g), tada će također biti vraćen niz, ali s GLOBALNIM utakmicama. Odnosno, snimljeni rezultati se ne vraćaju.

Javascript

str = "Za informacije, pogledajte: Poglavlje 3.4.5.1, Poglavlje 7.5"; re = /chapter (\d+(\.\d)*)/ig // bez obveza - globalno pronađeno = str.match(re) console.log(found); // ["Poglavlje 3.4.5.1", "Poglavlje 7.5"]

izvrsna funkcija

regexp.exec(str)

Funkcija exec provjerava odgovara li regularni izraz nizu (str). Vraća niz rezultata (s obvezama) ili null. Svaki sljedeći poziv exec metode (na primjer, when koristeći dok) nastaje (zbog automatsko ažuriranje kada se exec indeks kraja posljednjeg pretraživanja lastIndex) pomiče na sljedeće globalno podudaranje (ako je navedena zastavica g).

Javascript

var html = "
BAM! TUMARALO!
"; var reg = /<(\/?)(\w+)([^>]*?)>/g; //console.log(reg.exec(html)); // ["
", "", "div", " class="test""] while((match = reg.exec(html)) !== null)( console.log(reg.exec(html)); ) /* [" ", "", "b", ""] [" ", "", "em", ""] ["
", "/", "div", ""] */

Bez globalne zastave metode match i exec rade identično. Odnosno, vraćaju niz s prvim globalnim podudaranjem i predaju.

Javascript

// odgovara var html = "
BAM! TUMARALO!
"; var reg = /<(\/?)(\w+)([^>]*?)>/; // bez globalne konzole.log(html.match(reg)); // ["
", "", "div", " class="test""] // exec var html = "
BAM! TUMARALO!
"; var reg = /<(\/?)(\w+)([^>]*?)>/; // bez globalne konzole.log(reg.exec(html)); // ["
", "", "div", " class="test""]

zamijeniti funkciju

str.replace(regexp, newSubStr|function)
  • regexp - reg. izraz;
  • newSubStr - niz u koji se mijenja pronađeni izraz u tekstu;
  • funkcija - poziva se za svako pronađeno podudaranje s varijabilnim popisom parametara (podsjetimo se da globalno pretraživanje u nizu pronalazi sve slučajeve podudaranja uzorka).

Povratna vrijednost ove funkcije služi kao zamjena.

Parametri funkcije:

  • 1 - Potpuni podudarni podniz.
  • 2 - Značenje grupa zagrada (fiksacije).
  • 3 - Indeks (pozicija) podudaranja u izvornom nizu.
  • 4 - Izvorni niz.

Metoda ne mijenja pozivni niz, ali vraća novi nakon zamjene podudaranja. Za izvođenje globalnog pretraživanja i zamjene koristite regexp s oznakom g.

"GHGHGHGTTTT".zamijeni(//g,"K"); //"KKKKKKKKKKK"

Javascript

funkcija upLetter(allStr,letter) ( return letter.toUpperCase(); ) var res = "border-top-width".replace(/-(\w)/g, upLetter); konzola.log(res); //borderTopWidth

Regularni izrazi je jezik koji opisuje uzorke nizova na temelju metakaraktera. Metaznak je znak u regularnom izrazu koji opisuje neku klasu znakova u nizu, označava položaj podniza, označava broj ponavljanja ili grupira znakove u podniz. Na primjer, metaznak \d opisuje znamenke, a $ označava kraj retka. Regularni izraz također može sadržavati obične znakove koji sami sebe opisuju. Skup i značenje metakaraktera u regularnim izrazima opisani su standardom PCRE, čija je većina značajki podržana u JS-u.

Opseg regularnih izraza

Regularni izrazi obično se koriste za sljedeće zadatke:

  • Usporedba. Cilj ovog zadatka bit će otkriti odgovara li određeni tekst zadanom regularnom izrazu.
  • traži. Pomoću regularnih izraza zgodno je pronaći odgovarajuće podstringove i izdvojiti ih iz teksta.
  • Zamjena. Regularni izrazi često pomažu ne samo pronaći, već i zamijeniti podniz u tekstu koji odgovara regularnom izrazu.

U konačnici, korištenjem regularnih izraza možete, na primjer:

  • Provjerite jesu li korisnički podaci u obrascu ispravno popunjeni.
  • Pronađite poveznicu na sliku u tekstu koji korisnik unese kako bi se automatski priložila poruci.
  • Uklonite html oznake iz teksta.
  • Provjerite kôd prije kompilacije za jednostavne sintaktičke pogreške.

Značajke regularnih izraza u JS-u. Literali regularnog izraza

Glavna značajka regularnih izraza u JS-u je da za njih postoji posebna vrsta literala. Kao što su string literali okruženi navodnicima, regularni izrazi literali su okruženi kosim crtama (/). Stoga JS kod može sadržavati izraze poput:

console.log(typeof /tcoder/); // objekt

Zapravo, regularni izraz koji je definiran u retku

var pattern = new RegExp("tcoder");

Ova metoda stvaranja obično se koristi kada trebate koristiti varijable u regularnom izrazu ili dinamički stvoriti regularni izraz. U svim ostalim slučajevima koriste se literali regularnih izraza zbog kraće sintakse i nepostojanja potrebe za dodatnim escape-ovanjem nekih znakova.

Znakovi u regularnim izrazima

Svi alfanumerički znakovi u regularnim izrazima nisu metakarakteri i opisuju sami sebe. To znači da regularni izraz /tcoder/ odgovarat će podnizu tcoder. U regularnim izrazima također možete navesti neabecedne znakove, kao što su novi red (\n), tab (\t) i tako dalje. Svi ti simboli također odgovaraju sami sebi. Stavljanje kose crte (\) ispred abecednog znaka učinit će ga metaznakom, ako postoji. Na primjer, slovo "d" postat će metaznak koji opisuje brojeve ako mu prethodi kosa crta (\d).

Klase znakova

Pojedinačni znakovi u regularnim izrazima mogu se grupirati u klase pomoću uglatih zagrada. Klasa stvorena na ovaj način odgovara bilo kojem od simbola koji su u njoj uključeni. Na primjer, regularni izraz // odgovarat će slova "t", "c", "o", "d", "e", "r".

U klasama također možete odrediti niz znakova pomoću crtice. Na primjer, klasa odgovara klasi. Imajte na umu da neki metakarakteri u regularnim izrazima već opisuju klase znakova. Na primjer, metakarakter \d je ekvivalentan klasi. Imajte na umu da metakarakteri koji opisuju klase znakova također mogu biti uključeni u klase. Na primjer, klasa [\da-f] odgovara brojevima i slovima "a", "b", "d", "e", "f", odnosno bilo kojem heksadecimalnom znaku.

Također je moguće opisati klasu znakova navođenjem znakova koji ne bi trebali biti uključeni u nju. To se radi pomoću metaznaka ^. Na primjer, klasa [^\d] odgovarat će bilo kojem znaku osim broja.

Ponavljanja

Sada možemo opisati, recimo, decimalni broj bilo koje zadane duljine, jednostavnim pisanjem u nizu onoliko metaznakova \d koliko znamenki ima ovaj broj. Slažem se da ovaj pristup nije baš prikladan. Osim toga, ne možemo opisati raspon potrebnih ponavljanja. Na primjer, ne možemo opisati broj s jednom ili dvije znamenke. Srećom, regularni izrazi pružaju mogućnost opisivanja raspona ponavljanja pomoću metaznakova. Da biste to učinili, nakon simbola jednostavno označite raspon ponavljanja vitičaste zagrade. Na primjer, regularni izraz /tco(1, 3)der/ nizovi "tcoder", "tcooder" i "tcoooder" će odgovarati. Ako izostavite maksimalni broj ponavljanja, ostavljajući zarez i minimalni broj ponavljanja, možete odrediti broj ponavljanja veći od navedenog. Na primjer, regularni izraz /bo(2,)bs/ odgovarat će nizovima "boobs", "booobs", "boooobs" i tako dalje s bilo kojim brojem slova "o", najmanje dva.

Ako izostavite zarez u vitičastim zagradama i navedete samo jedan broj, on će označavati točan broj ponavljanja. Na primjer, regularni izraz /\d(5)/ odgovaraju peteroznamenkastim brojevima.

Neki rasponi ponavljanja koriste se prilično često i imaju vlastite metaznakove koji ih označavaju.

Pohlepna ponavljanja

Gornja sintaksa opisuje maksimalan broj ponavljanja, odnosno od svih mogućih brojeva ponavljanja, čiji je broj u navedenom rasponu, bira se maksimalni. Takva se ponavljanja nazivaju pohlepnim. To znači da će regularni izraz /\d+/ u nizu yeah!!111 odgovarati podnizu “111”, a ne “11” ili “1”, iako metakarakter “+” opisuje jedno ili više ponavljanja.

Ako želite implementirati nepohlepno ponavljanje, odnosno odabrati najmanji mogući broj ponavljanja iz navedenog raspona, tada jednostavno stavite "?" nakon raspona ponavljanja. Na primjer, regularni izraz /\d+?/ u nizu “yeah!!111” podudarat će se podniz “1” i regularni izraz /\d(2,)/ u istom retku podudarat će se podniz “11”.

Vrijedno je obratiti pozornost na važnu značajku nepohlepnog ponavljanja. Razmotrite regularni izraz /bo(2,)?bs/. U retku "i like big boooobs" odgovarat će, kao i kod pohlepnog ponavljanja, podniz boooobs, a ne boobs, kako bi se moglo pomisliti. Činjenica je da regularni izraz ne može podudarati nekoliko podnizova koji se nalaze na različitim mjestima u retku u jednom podudaranju. To jest, naš regularni izraz ne može odgovarati podnizovima "boo" i "bs" spojenim u jedan redak.

Alternative

U regularnim izrazima također možete koristiti alternative - za opisivanje skupa nizova koji odgovaraju ili jednom ili drugom dijelu regularnog izraza. Takvi se dijelovi nazivaju alternativama i odvajaju se pomoću vertikalna linija. Na primjer, regularni izraz /dva|dvaput|\2/ ili podniz "dva", ili podniz "dvaput", ili podniz "2" može odgovarati. Lanac alternativa se obrađuje slijeva nadesno do prvog podudaranja i može se podudarati samo s podnizom koji je opisan samo jednom alternativom. Na primjer, regularni izraz /java|skripta/ u nizu “I like javascript” odgovarat će samo podstring “java”.

grupe

Za tretiranje više znakova kao jedne jedinice pri korištenju raspona ponavljanja, klasa znakova i svega između, jednostavno ih stavite u zagrade. Na primjer, regularni izraz /istina(koder)?/ nizovi "truecoder" i "true" će se podudarati.

Linkovi

Osim činjenice da zagrade spajaju znakove u regularnom izrazu u jedinstvenu cjelinu, na odgovarajući podniz se može referencirati jednostavnim navođenjem iza kose crte broja lijeve zagrade iz para zagrada koje ga uokviruju. Zagrade su numerirane s lijeva na desno počevši od jedan. Na primjer, u regularnom izrazu /(jedan dva tri četiri)/\1 se odnosi na jedan, \2 na "dva", \3 na "tri", \4 na "četiri". Kao primjer korištenja takvih poveznica dajemo regularni izraz /(\d)\1/, što odgovara dvoznamenkastim brojevima s istim znamenkama. Važno ograničenje korištenje povratnih poveznica je nemogućnost korištenja istih u nastavi, odnosno npr. opisati dvoznamenkasti broj s različite brojeve regularni izraz /(\d)[^\1]/ Zabranjeno je.

Nezapamćene zagrade

Često samo želite grupirati simbole, ali nema potrebe za stvaranjem veze. U ovom slučaju možete napisati ?: odmah iza lijeve zagrade za grupiranje. Na primjer, u regularnom izrazu /(jedan dva tri)/\2 će označavati "tri".

Takve se zagrade ponekad nazivaju nepamćećim. Imaju još jednu važnu značajku, o kojoj ćemo govoriti u sljedećoj lekciji.

Određivanje pozicije

U regularnim izrazima postoje i metaznakovi koji označavaju određenu poziciju u nizu. Najčešće korišteni simboli su ^ i $, koji označavaju početak i kraj retka. Na primjer, regularni izraz /\..+$/ ekstenzije u nazivima datoteka podudarat će se s regularnim izrazom /^\d/ prva znamenka u retku, ako postoji.

Pozitivne i negativne unaprijed provjere

Koristeći regularne izraze, također možete opisati podniz nakon kojeg slijedi ili ne slijedi podniz opisan drugim uzorkom. Na primjer, trebamo pronaći riječ java samo ako iza nje slijedi “script”. Ovaj problem se može riješiti korištenjem regularnog izraza /java(?=skripta)/. Ako trebamo opisati podniz "java" koji nije praćen skriptom, možemo koristiti regularni izraz /java(?!skripta)/.

Sakupimo sve o čemu smo gore govorili u jednu tablicu.

Simbol Značenje
a|b Odgovara a ili i.
(…) Grupne zagrade. Također se možete pozvati na podniz koji odgovara uzorku u zagradama.
(?:…) Samo grupiranje, bez mogućnosti povezivanja.
\n Veza na podniz koji odgovara n-tom uzorku.
^ Početak ulaznog podatka ili početak retka.
$ Kraj unosa ili kraj retka.
a(?=b) Podudara se s podnizom opisanim uzorkom a samo ako ga slijedi podniz opisan uzorkom b.
a(?!b) Podudara se s podnizom opisanim uzorkom a samo ako slijedi Ne slijedi podniz opisan uzorkom b.

Zastave

I konačno, posljednji element sintakse regularnog izraza. Zastavice određuju pravila podudaranja koja se primjenjuju na cijeli regularni izraz. Za razliku od svih drugih elemenata u sintaksi regularnog izraza, oni se pišu odmah nakon literala regularnog izraza ili se prosljeđuju u redu kao drugi parametar konstruktoru objekta RegExp.

Postoje samo tri zastavice regularnog izraza u JavaScriptu:

ja– prilikom navođenja ove zastavice ne uzimaju se u obzir velika i mala slova, tj. npr. regularni izraz \javascript\i odgovarat će nizovima "javascript", "JavaScript", "JAVASCRIPT", "jAvAScript" itd.

m– ova zastavica omogućuje pretragu u više redaka. To znači da ako tekst sadrži znakove za novi redak i ova zastavica je postavljena, tada će simboli ^ i $, osim početku i kraju cijelog teksta, također odgovarati početku i kraju svakog retka u tekstu. Na primjer, regularni izraz /linija$/m odgovara podnizu “linija”, i u nizu “prvi redak” i u nizu “jedan\ndrugi red\ndva”.

g– omogućuje globalno pretraživanje, odnosno regularni izraz, ako je ova zastavica uključena, odgovara svim podnizovima koji mu odgovaraju, a ne samo prvom, kao što je slučaj ako ova zastavica nije prisutna.

Zastavice se mogu međusobno kombinirati bilo kojim redoslijedom, tj \tcoder\mig, \tcoder\gim, \tocder\gmi itd., to je ista stvar. Redoslijed zastavica također nije bitan ako se prosljeđuju u liniji kao drugi argument konstruktoru objekta RegExp, to je novi RegExp("tcoder", "im") I novi RegExp("tcoder", "im") samo ista stvar.

ZY

Regularni izrazi su vrlo moćni i zgodan alat za rad s nizovima, omogućujući vam da smanjite stotine redaka koda na jedan izraz. Nažalost, njihova je sintaksa ponekad presložena i teška za čitanje, pa čak i najiskusniji programer može zaboraviti što znači prilično složen regularni izraz koji je napisao prije par dana ako ga ne komentira. Iz tih razloga, ponekad je ipak vrijedno napustiti regularne izraze u korist regularnih metoda za rad sa nizovima.



reci prijateljima
Pročitajte također