Rendszeres kifejezések a JavaScriptben. RegExp objektum

A JavaScript RegExp osztálya egy reguláris kifejezés - egy karaktermintát leíró objektum. A RegExp objektumokat általában az alábbi speciális literális szintaxis segítségével hozzák létre, de a RegExp () konstruktorral is létrehozhatók.

Szintaxis

// speciális szó szerinti szintaxis használatával var regex = / pattern / flags; // a konstruktor használatával var regex = új RegExp ("minta", "zászlók"); var regex = új RegExp ( / pattern /, "flags");

Paraméterértékek:

Rendszeres kifejezés zászlók

ZászlóLeírás
gLehetővé teszi az összes mérkőzés megtalálását ahelyett, hogy megállna az első mérkőzés után ( globális mérkőzés zászló).
énLehetővé teszi a kis- és nagybetűk megkülönböztetését ( figyelmen kívül hagyja a kisbetűs zászlót).
mAz illesztés több sorban történik. A kezdő és befejező karaktereket (^ és $) több sorban dolgozzák fel, vagyis az egyezés minden sor elején vagy végén történik (\ n vagy határoló), és nem csak a teljes sor elején vagy végén ( többsoros zászló).
uA minta Unicode kódpontok sorozataként lesz értelmezve ( unicode zászló).
yAz egyezés az index által történik, amelyre a reguláris kifejezés lastIndex tulajdonsága mutat, míg az egyezés nem kerül végrehajtásra egy későbbi vagy korábbi indexen ( ragadós zászló).

Karakterkészletek

Metakarakterek

SzimbólumLeírás
. Egy karaktert talál a karakteren kívül új sor, vagy sorvégi karakter (\ n, \ r, \ u2028 vagy \ u2029).
\ dMegkeresi a számjegy karakterét az alap latin ábécében. Karakterkészlet használatával egyenértékű.
\ DMinden olyan karaktert megtalál, amely nem számjegy az alap latin ábécében. A [^ 0-9] karakterkészlettel egyenértékű.
\ sEgyetlen szóköz karaktert keres. A szóköz szóközre, tabulátorra, oldalfeedre, soremelésre és más Unicode szóközökre utal. A karakterkészlettel egyenértékű [\ f \ n \ r \ t \ v \ u00a0 \ u1680 \ u180e \ u2000 \ u2001 \ u2002 \ u2003 \ u2004 \ u2005 \ u2006 \ u2007 \ u2008 \ u200a \ u202 \ u2029 \ u202f \ u205f \ u3000].
\ SEgyetlen karaktert keres, amely nem szóköz. A szóköz szóközre, tabulátorra, oldalhírcsatornára, sorcsatornára és más Unicode szóközökre utal. Karakterkészlettel egyenértékű [^ \ f \ n \ r \ t \ v \ u00a0 \ u1680 \ u180e \ u2000 \ u2001 \ u2002 \ u2003 \ u2004 \ u2006 \ u2007 \ u2008 \ u200a \ U2028 \ u2029f \ u205f \ u3000].
[\ b]A backspace karaktert keresi (speciális karakter \ b, U + 0008).
\0 Megtalálja a 0 karaktert (nulla).
\ nMegkeresi az újsoros karaktert.
\ fMegkeresi az oldalcsatorna karakterét.
\ rKeresi a kocsi visszatérési karakterét.
\ tVízszintes lapkaraktert keres.
\ vFüggőleges tabulátorkaraktert keres.
\ wBármilyen alfanumerikus karaktert talál az alap latin ábécében, beleértve az aláhúzást is. Karakterkészlettel egyenértékű.
\ WBármilyen karaktert keres, amely nem alapvető latin ábécé karakter. A [^ a-Za-z0-9_] karakterkészlettel egyenértékű.
\ cXEgy vezérlő karaktert keres egy karakterláncban. Ahol X egy betű A-tól Z-ig. Például a / \ cM / a Ctrl-M billentyűt jelenti.
\ xhhKaraktert keres hexadecimális értékkel (hh egy kétjegyű hexadecimális érték).
\ uhhhhKaraktert keres UTF-16 kódolással (hhhh négyjegyű hexadecimális érték).
\ u (hhhh) vagy
\ u (hhhhh)
U + hhhh vagy U + hhhhh (hexadecimális érték) Unicode értékű karaktert keres. Csak akkor, ha megadják az u zászlót.
\ Azt jelzi, hogy a következő karakter különleges, és nem szó szerint kell értelmezni. A rendszerint különleges módon kezelt karakterek esetében azt jelzi, hogy a következő karakter nem különleges, és szó szerint kell értelmezni.

Korlátozások

Kvantusok

SzimbólumLeírás
n *Az egyezés minden olyan karakterláncon előfordul, amely nulla vagy több karaktert tartalmaz n.
n +Az egyezés minden olyan karakterlánccal történik, amely legalább egy karaktert tartalmaz n.
n?Az egyezés az elem előtti bármely sorban történik n nulla vagy egyszer.
n (x)Egyezik minden karakterláncot tartalmazó karakterlánccal n bizonyos számú alkalommal x. x
n (x,) x az előző elem előfordulása n. x pozitív egész számnak kell lennie.
n (x, y)Megfelel minden olyan sornak, amely legalább tartalmaz x, de nem többet, mint a y az előző elem előfordulása n. xés y pozitív egész számoknak kell lenniük.
n *?
n +?
n ??
n (x)?
n (x,)?
n (x, y)?
Az egyezés a kvantorokkal *, +,? és (...), azonban a keresést a lehető legkisebb egyezéssel hajtják végre. Az alapértelmezett a mohó mód ,? végén a kvantor lehetővé teszi egy "nem mohó" mód megadását, amelyben a párosítás a lehető legkevesebb alkalommal megismétlődik.
x (? = y)Lehetővé teszi az egyezést x, csak akkor, ha x kellene y.
x (?! y)Lehetővé teszi az egyezést x, csak akkor, ha x nem következik y.
x | yAz egyezés a megadott alternatívák bármelyikével történik.

Csoportosítás és visszacsatolások

SzimbólumLeírás
(x)Szimbólumot talál xés emlékezzen a mérkőzés eredményére ("zárójelek"). Az illesztett alstringet a kapott tömb elemeiből lehet meghívni ..., [n], vagy az előre meghatározott RegExp $ 1 ..., $ 9 objektum tulajdonságaiból.
(?: x)Szimbólumot talál x, de nem emlékszik a mérkőzés eredményére ("nem rögzítő zárójel"). Az illesztett alstringet nem lehet meghívni a kapott tömb elemeiből, [n], vagy az előre meghatározott RegExp $ 1 ..., $ 9 objektum tulajdonságaiból.
\ nVisszatérés az utolsó alláncra, amely megegyezik az reguláris kifejezés zárójelben lévő n. n pozitív egész számnak kell lennie.

Ez a cikk a Javascript rendszeres kifejezés használatának alapjait ismertette.

Bevezetés

Mi a reguláris kifejezés?

A JS reguláris kifejezés karaktersorozat, amely keresési szabályt alkot. Ezt a szabályt lehet használni a szöveg kereséséhez, valamint cseréjéhez. A gyakorlatban a reguláris kifejezés akár egyetlen karakterből is állhat, de a bonyolultabb keresési minták gyakoribbak.

A Javascriptben a reguláris kifejezések is objektumok. Ezek olyan minták, amelyeket karakterláncok karakterláncainak illesztésére használnak. Ezeket a RegExp objektum exec () és test () metódusaiban, valamint a String objektum match (), cserél (), search és split () metódusaiban használják.

Példa

var minta = / példa / i

Az / example / i szabályos kifejezés. példa egy sablon ( amelyet a keresésben használni fognak). i a kis- és nagybetűk érzékenységét jelző módosító.

Rendszeres kifejezés előkészítése

A JS reguláris kifejezések egy mintából és egy módosítóból állnak. A szintaxis valami ilyesmi lesz:

/ pattern / modifiers;

A sablon határozza meg a keresési szabályt. Olyan egyszerű karakterekből áll, mint az / abc / vagy az egyszerű és a kombinációja speciális karakterek: / abc / vagy / Fejezet (d +). d /.

Sablon táblázat

A módosítók lehetővé teszik a lekérdezések kis- és nagybetűinek megkülönböztetését, globális stb. Kis- és nagybetűket, valamint globális kereséseket is végeznek.

Módosító táblázat

Most már készen állunk a JS reguláris kifejezések alkalmazására. Ennek két fő módja van: regex objektum vagy karakterlánc regex használata.

Regex objektum használata

Hozzon létre egy reguláris kifejezés objektumot

Ez az objektum egy karaktermintát ír le. Minta illesztésére használják. Két módja van a reguláris kifejezés objektum létrehozásának.

Módszer: regex literal használata, amely perjelekkel záródó mintából áll, például:

var reg = / ab + c /;

A reguláris kifejezés literáljai elindítják a reguláris kifejezés előzetes fordítását a szkript elemzésekor. Ha a reguláris kifejezés tartós, akkor használja a teljesítmény javítására.

2. módszer: hívja meg a RegExp objektum konstruktor függvényét, például:

var reg = új RegExp ("ab + c");

A konstruktor használata lehetővé teszi a JS reguláris kifejezés fordítás közbeni fordítását. Akkor használja ezt a módszert, ha a reguláris kifejezés megváltozik, vagy nem ismeri előre a mintát. Például, ha információkat kap egy felhasználótól, aki beír egy keresési kifejezést.

Reguláris kifejezés objektum módszerek

Vessünk egy pillantást a reguláris kifejezés objektum néhány gyakori módszerére:

  • fordítás () ( elavult az 1.5 -ös verzióban) - szabályos kifejezést fordít;
  • exec () - Egyezést hajt végre egy karakterláncon. Visszaadja az első egyezést;
  • teszt () - Egyezést hajt végre egy karakterláncon. Igaz vagy hamis értéket ad vissza;
  • toString () - A reguláris kifejezés karakterlánc értékét adja vissza.

Példák

A teszt használata ()

A test () metódus egy RegExp objektum reguláris kifejezése. Minta karakterláncot keres, és az eredménytől függően visszatér, igaz vagy hamis. A következő JS reguláris kifejezés példa azt mutatja be, hogyan lehet karakterláncban keresni a karaktert " e”:

var patt = / e /; patt.test ("A világ legjobb dolgai ingyenesek!");

Mivel itt a sor tartalmazza: e”, Ennek a kódnak az eredménye igaz lesz.

Egyáltalán nem kell szabályos kifejezéseket elhelyezni egy változóban. Ugyanez a lekérdezés egy sorban is elvégezhető:

/e/.test("A világ legjobb dolgai ingyenesek! ");

Az exec () használatával

Megkeresi a megadott keresési szabály karakterláncát, és visszaadja a talált szöveget. Ha nem találunk egyezést, akkor az eredmény nulla.

Lássuk a módszert működés közben, ugyanazon szimbólum példáján keresztül " e”:

/e/.exec("A világ legjobb dolgai ingyenesek! ");

Mivel a sor " e”, Ennek a kódnak az eredménye a .e lesz.

Szabályos kifejezés alkalmazása karakterláncra

A Javascriptben ezek a kifejezések a String objektum két módszerével is használhatók: search () és csere (). A kereséshez és a szövegben való cseréhez szükségesek.

  • A search () metódus - kifejezést használ a találat megtalálására, és információt ad vissza a mérkőzés helyéről;
  • Replace () metódus - egy módosított karakterláncot ad vissza egy lecserélt sablonnal.

Példák

JS reguláris kifejezés alkalmazása kis- és nagybetűk megkülönböztetésének keresésére a következő kifejezésre: w3iskolák" Sorban:

var str = "Látogasson el a W3Schools -ba"; var n = str.search ( / w3schools / i);

Az eredmény n -ben 6.

A keresési módszer egy karakterláncot is elfogad argumentumként. A karakterlánc argumentum reguláris kifejezéssé lesz átalakítva:

A karakterlánc használatával keressük meg a következő kifejezést: W3 iskolák" Sorban.

Rendszeres kifejezések

Reguláris kifejezés egy karaktermintát leíró objektum. A JavaScriptben található RegExp osztály a reguláris kifejezéseket képviseli, a String és a RegExp osztályobjektumok pedig olyan módszereket határoznak meg, amelyek szabályos kifejezéseket használnak a mintaegyeztetési és keresési műveletek végrehajtására a szöveggel. A JavaScript reguláris kifejezés nyelvtana a Perl 5 nyelvben használt reguláris kifejezés szintaxisának meglehetősen teljes részhalmazát tartalmazza, így ha tapasztalt a Perl nyelvben, könnyen leírhat mintákat a JavaScript programokban.

Az ECMAScript által nem támogatott Perl reguláris kifejezések jellemzői az s (egysoros mód) és az x (kiterjesztett szintaxis) jelzők; menekülési szekvenciák \ a, \ e, \ l, \ u, \ L, \ U, \ E, \ Q, \ A, \ Z, \ z és \ G és más kiterjesztett konstrukciók (?

Rendszeres kifejezések meghatározása

A JavaScriptben a reguláris kifejezéseket objektumok ábrázolják RegExp... A RegExp objektumok a RegExp () konstruktor használatával hozhatók létre, de gyakrabban speciális literális szintaxissal jönnek létre. Ahogy a karakterlánc -literálokat idézőjelű karakterekként határozzák meg, a reguláris kifejezésű literálokat is perjel (/) páros karakterekként határozzák meg. Így a JavaScript kód tartalmazhat ilyen karakterláncokat:

Változó minta = / s $ /;

Ez a sor új RegExp objektumot hoz létre, és hozzárendeli a minta változóhoz. Ez a RegExp objektum megkeresi az "s" karakterrel végződő karakterláncokat. Ugyanaz a reguláris kifejezés definiálható a RegExp () konstruktor használatával:

Var pattern = new RegExp ("s $");

A regex minta specifikáció karaktersorból áll. A legtöbb karakter, beleértve az összes alfanumerikus karaktert is, szó szerint írja le azokat a karaktereket, amelyeknek jelen kell lenniük. Vagyis a / java / reguláris kifejezés illeszkedik a "java" alstringet tartalmazó karakterláncokhoz.

A reguláris kifejezések többi karakterét nem arra használják, hogy megtalálják a megfelelő megfelelőket, hanem különleges jelentéssel bírnak. Például az / s $ / reguláris kifejezés két karaktert tartalmaz. Az első s egy szó szerinti karakter keresését jelzi. Másodszor, a $ egy speciális metakarakter, amely egy sor végét jelöli. Tehát ez a reguláris kifejezés megfelel minden olyan karakterláncnak, amely végződik s -vel.

A következő szakaszok leírják a JavaScript rendszeres kifejezéseiben használt különböző karaktereket és metakaraktereket.

Szó szerinti karakterek

Amint azt korábban említettük, a reguláris kifejezésekben szereplő összes ábécé karakter és szám megegyezik önmagukkal. A JavaScript reguláris kifejezés szintaxisa azt is támogatja, hogy bizonyos nem ábécé szerinti karaktereket megadhat, a fordított perjellel (\) kezdődő menekülési szekvenciákkal. Például a \ n egy sorcsatorna karakterrel egyezik. Ezeket a szimbólumokat az alábbi táblázat tartalmazza:

Néhány írásjel különleges jelentéssel bír a reguláris kifejezésekben:

^ $ . * + ? = ! : | \ / () { } -

E szimbólumok jelentését a következő szakaszok ismertetik. Némelyiküknek csak bizonyos regex kontextusokban van különleges jelentése, míg más esetekben szó szerint. Általában azonban ahhoz, hogy ezen karakterek bármelyikét szó szerint belefoglalja a reguláris kifejezésbe, azt egy fordított perjelekkel kell megadnia. Más karaktereknek, mint például az idézőjeleknek és a @-nak nincs különleges jelentése, és egyszerűen illeszkednek a reguláris kifejezésekbe.

Ha nem emlékszik pontosan, hogy melyik karakter előtt kell \ -nak lennie, nyugodtan elhelyezhet egy fordított perjelet bármelyik karakter előtt. Ne feledje azonban, hogy sok betűnek és számnak különleges jelentése van, ha perjelekkel kombinálják őket, ezért a keresett betűk és számok szó előtt nem állhatnak \. Ahhoz, hogy magát a fordított perjelet beírja a regexp -be, nyilvánvalóan egy másik fordított karaktert kell előtte helyeznie. Például a következő reguláris kifejezés megfelel minden fordított perjel karaktert tartalmazó karakterláncnak: / \\ /.

Karakterosztályok

Az egyes szó szerinti karaktereket karakterosztályokba lehet kombinálni, ha szögletes zárójelbe zárjuk őket. A karakterosztály megfelel az osztály bármely karakterének. Ezért a // reguláris kifejezés megfelel az a, b vagy c karakterek egyikének.

A tagadott karakterosztályokat úgy is definiálhatjuk, hogy azok megfeleljenek a zárójelben jelzettől eltérő karaktereknek. A letagadott karakterosztályt a ^ karakter adja meg a bal oldali zárójelet követő első karakterként. A / [^ abc] / reguláris kifejezés a, b vagy c kivételével bármilyen karakterhez illeszkedik. A karakterosztályokban egy karaktertartomány kötőjele segítségével adható meg. Keresse meg a latin ábécé összes karakterét itt: kisbetűs a // kifejezés használatával történik, és a latin karakterkészlet bármely betűje vagy száma megtalálható a // kifejezés használatával.

Bizonyos karakterosztályokat különösen gyakran használnak, ezért a JavaScript reguláris kifejezés szintaxisa speciális karaktereket és escape -szekvenciákat tartalmaz azok jelölésére. Például a \ s illeszkedik a szóközökhöz, a tabulátorokhoz és az Unicode szóközökhez, míg a \ S a nem Unicode szóközhöz.

Az alábbi táblázat felsorolja ezeket a speciális karaktereket és a karakterosztályok szintaxisát. (Ne feledje, hogy a karakteres osztályok egy része csak ASCII karaktereknek felel meg, és nem terjed ki az Unicode karakterekre. Kifejezetten definiálhatja saját osztályok Unicode karakterek, például a / [\ u0400- \ u04FF] / kifejezés megfelel bármely cirill betűnek.)

JavaScript regex karakterosztályok
Szimbólum Levelezés
[...] A zárójelben lévő karakterek bármelyike
[^...] Bármilyen karakter nincs zárójelben
. Bármilyen karakter, kivéve az új sort vagy más Unicode karakterlánc -elválasztót
\ w Bármilyen ASCII szöveges karakter. Egyenértékű
\ W Minden olyan karakter, amely nem ASCII szöveges karakter. [^ A-zA-Z0-9_] egyenértékű
\ s Bármely Unicode szóköz karakter
\ S A Unicode halmaz bármely nem szóköz karaktere. Vegye figyelembe, hogy a \ w és a \ S nem ugyanaz
\ d Bármilyen ASCII számjegy. Egyenértékű
\ D Bármilyen karakter, kivéve az ASCII számjegyeket. [^ 0-9] egyenértékű
[\ b] Visszatérési karakter literal

Ne feledje, hogy az osztály speciális karaktersorozatai szögletes zárójelbe zárhatók. \ s megfelel minden szóköz karakternek, \ d pedig bármelyik számjegynek, ezért a / [\ s \ d] / megfelel minden szóköznek.

Ismétlés

A reguláris kifejezések szintaxisának eddigi ismeretében egy kétjegyű számot leírhatunk / \ d \ d / vagy négyjegyű számot / \ d \ d \ d \ d / -ként, de nem tehetjük, mert Például írjon le egy számot, tetszőleges számú számjegyet vagy egy három betűből álló karakterláncot, amelyet egy opcionális számjegy követ. Ezek a bonyolultabb minták szabályos kifejezés szintaxist használnak annak jelzésére, hogy egy adott reguláris kifejezési elem hányszor ismételhető meg.

Az ismétlés szimbólumai mindig azt a mintát követik, amelyre vonatkoznak. Bizonyos típusú ismétléseket gyakran használnak, és speciális szimbólumok jelzik ezeket az eseteket. Például a + egyezik az előző minta egy vagy több példányával. Az alábbi táblázat összefoglalja az ismétlés szintaxisát:

Az alábbi sorok néhány példát mutatnak be:

Var minta = / \ d (2,4) /; // Egyezik egy két -négyjegyű számmintával = / \ w (3) \ d? /; // Pontosan egyezik három szó karakterrel és egy választható számjegy mintával = / \ s + java \ s + /; // Illeszti a "java" szót egy vagy több szóközzel // előtte és utána minta = / [^ (] * /; // Egyezik a nyitó zárójeletől eltérő nulla vagy több karakterrel

Legyen óvatos az ismétlődő karakterek * és?. Használatakor. Ezek megfelelhetnek az előttük megadott minta hiányának, és ezért a szimbólumok hiányának. Például az / a * / reguláris kifejezés egyezik a "bbbb" karakterlánccal, mert nem tartalmazza a karaktert.

A táblázatban felsorolt ​​ismétlési karakterek megfelelnek a maximális ismétlésszámnak, amellyel a reguláris kifejezés további részei kereshetők. Azt mondjuk, hogy ez "mohó" ismétlés. Az ismétlést nem kapzsi módon is meg lehet valósítani. Elég, ha az ismétlés szimbóluma (vagy szimbólumai) után kérdőjelet jelez: ??, +?, *? vagy akár (1,5)?

Például az / a + / reguláris kifejezés egyezik az a betű egy vagy több példányával. Az "aaa" karakterláncra alkalmazva mind a három betűnek megfelel. Másrészt az / a +? / Kifejezés illeszkedik az a betű egy vagy több példányához, és kiválasztja a lehető legkevesebb karaktert. Ugyanazon sorra alkalmazva ez a minta csak az első a betűnek felel meg.

A "nem biztonságos" ismétlés nem mindig adja meg a várt eredményt. Tekintsük az / a + b / mintát, amely megfelel egy vagy több karakternek, majd b karakternek. Ha az "aaab" karakterláncra alkalmazzuk, akkor a teljes karakterlánccal egyezik.

Most nézzük meg a / a +? B / "nem mohó" verzióját. Azt hihetnénk, hogy meg kell egyeznie a b karakterrel, amelyet csak egy a karakter előz meg. Ha ugyanahhoz a karakterlánchoz alkalmazzák, akkor az "aaab" elvárt, hogy illeszkedjen az a és az utolsó b ponthoz. A valóságban azonban az egész húr megfelel ennek a mintának, mint a "mohó" változat esetében. A lényeg az, hogy a reguláris kifejezésminták keresését úgy hajtják végre, hogy megkeresik a karakterlánc első pozícióját, amelyből az egyezés lehetségessé válik. Mivel a karakterlánc első karaktere alapján egyezés lehetséges, a következő karakterekkel kezdődő rövidebb egyezéseket nem is vesszük figyelembe.

Alternatívák, csoportosítás és linkek

A reguláris kifejezés grammatikája speciális karaktereket tartalmaz az alternatívák meghatározásához, az alkifejezések csoportosítását és a korábbi részkifejezésekre való hivatkozásokat. Cső szimbólum | az alternatívák elkülönítését szolgálja. Például az / ab | cd | ef / megfelel az "ab" karakterláncnak, vagy a "cd" karakterláncnak, vagy az "ef" karakterláncnak, és a / \ d (3) | (4) / minta három számjegyhez illeszkedik vagy négy kisbetű ...

Ne feledje, hogy az alternatívákat balról jobbra dolgozzuk fel, amíg meg nem találjuk az egyezést. Ha talál egyezést a bal oldali alternatívával, akkor a jobbat figyelmen kívül hagyja, még akkor is, ha "jobb" egyezés érhető el. Ezért, ha az / a | ab / mintát alkalmazzuk az "ab" karakterláncra, az csak az első karakterrel fog megegyezni.

A zárójeleknek több jelentése van a reguláris kifejezésekben. Az egyik a csoportosítás egyes elemek egy részkifejezésbe, így az elemek a |, *, +,? speciális karakterek használatakor másokat pedig egy egészként kezelnek. Például a / java (script)? / Illeszkedik a "java" szóhoz, amelyet az opcionális "script" szó követ, és / (ab | cd) + | ef) / egyezik az "ef" karakterlánccal vagy egy vagy több ismétléssel ugyanez az "ab" vagy "cd" karakterláncból.

A zárójelek egy másik használata a reguláris kifejezésekben az alminták definiálása a mintán belül. Ha egy szabályos kifejezés egyezést talál a cél karakterláncban, akkor kivonhatja a cél karakterláncnak azt a részét, amely megfelel egy adott zárójeles almintának.

Tegyük fel, hogy egy vagy több kisbetűt szeretne keresni, amelyet egy vagy több szám követ. Ehhez használja a / + \ d + / mintát. De tegyük fel azt is, hogy csak a számokat akarjuk minden mérkőzés végén. Ha a minta ezen részét zárójelbe teszi ( / + (\ d +) /), akkor számokat vehet ki az általunk talált egyezésekből. Ennek mikéntjét az alábbiakban ismertetjük.

Ehhez kapcsolódik a zárójeles alkifejezések egy másik használata, amely lehetővé teszi, hogy hivatkozzon ugyanazon reguláris kifejezés előző részének részkifejezéseire. Ez úgy érhető el, hogy a \ karakter után egy vagy több számjegyet ad meg. A számok a zárójeles alkifejezésnek a reguláris kifejezésen belüli helyzetére utalnak. Például az \ 1 az első részkifejezésre és a \ 3 a harmadik kifejezésre vonatkozik. Ne feledje, hogy az alkifejezések egymásba ágyazhatók, így a bal zárójelben lévő pozíciót kell használni a számláláshoz. Például a következő reguláris kifejezésben a beágyazott alkifejezési (cript) hivatkozás így nézne ki: \ 2:

/ (ava (cript)?) \ sis \ s (fun \ w *) /

Egy korábbi alkifejezésre való hivatkozás nem az adott részkifejezés mintájára mutat, hanem arra a talált szövegre, amely megfelel ennek a mintának. Ezért a hivatkozásokkal korlátozást lehet előírni, amely kiválasztja a karakterlánc részeit, amelyek pontosan ugyanazokat a karaktereket tartalmazzák. Például a következő reguláris kifejezés nulla vagy több karakternek felel meg az egy vagy a karaktereken belül idézőjelek... Nem szükséges azonban, hogy a kezdő és a záró idézet megfeleljen egymásnak (azaz, hogy mindkét idézet egyszeri vagy dupla):

/[""][^""]*[""]/

Követelhetjük az idézőjelek egyezését egy ilyen link segítségével:

Itt az \ 1 megfelel az első részkifejezésnek. Ebben a példában a hivatkozás korlátozza, hogy a záró idézőjel megegyezik a nyitó idézőjelekkel. Ez a reguláris kifejezés nem engedélyezi az idézőjelek használatát a kettős idézőjelek között, és fordítva.

Lehetőség van az elemek rendszeres kifejezésben történő csoportosítására is, anélkül, hogy ezekre az elemekre számozott hivatkozást hoznánk létre. Ahelyett, hogy egyszerűen elemeket csoportosítana a (és) közé, kezdje a csoportot (?: És fejezze be a következővel). Tekintsük például a következő mintát:

/ (ava (?: cript)?) \ sis \ s (szórakozás \ w *) /

Itt az alkifejezés (?: Cript) csak a csoportosításhoz szükséges, hogy az ismétlődő karakter alkalmazható legyen a csoportra. Ezek a módosított zárójelek nem hoznak létre linket, így ebben a reguláris kifejezésben a \ 2 a mintának megfelelő szövegre utal (fun \ w *).

Az alábbi táblázat felsorolja az alternatívákat, a csoportosítást és a hivatkozási operátorokat a reguláris kifejezésekben:

Javascript -kiválasztás, csoportosítás és regex karakterek
Szimbólum Jelentése
| Alternatív. Illeszkedik a bal oldali vagy a jobb oldali részkifejezéshez.
(...) Csoportosítás. Az elemeket egyetlen egységbe csoportosítja, amelyek a *, +,?, | Karakterekkel használhatók stb. Emlékezik a csoportnak megfelelő szimbólumokra is a későbbi hivatkozásokban való használatra.
(?:...) Csak csoportosítás. Az elemeket egyetlen egészbe csoportosítja, de nem emlékszik a csoporthoz tartozó szimbólumokra.
\ szám Ugyanazokat a karaktereket illeszti, amelyeket akkor találtunk, amikor a csoportot a számszámmal egyeztettük. A csoportok részkifejezések (esetleg egymásba ágyazott) zárójelben. A csoportszámok hozzárendelése a bal oldali zárójelek balról jobbra számolásával történik. A szimbólumokkal alkotott csoportok (?: Nincsenek számozva.

A mérkőzés pozíciójának megadása

Amint azt korábban leírtuk, sok regexp elem egy karakterhez illeszkedik karakterlánconként. Például a \ s megfelel egy szóköz karakternek. A többi reguláris kifejezés eleme megegyezik a karakterek közötti pozíciókkal, nem maguk a karakterek. Például a \ b megfelel egy szóhatárnak-a határ a \ w (ASCII szöveges karakter) és a \ W (nem szöveges karakter) között, vagy az ASCII szöveges karakter és a sor eleje vagy vége közötti határ.

Az olyan elemek, mint a \ b, nem határoznak meg olyan karaktereket, amelyeknek jelen kell lenniük a talált karakterláncban, de érvényes pozíciókat határoznak meg az egyezéshez. Ezeket az elemeket néha regex horgonyelemeknek nevezik, mert a mintát a karakterlánc egy adott pozíciójához rögzítik. A leggyakrabban használt horgonyelemek a ^ és a $, amelyek a sor elejére és végére rögzítik a mintákat.

Például a "JavaScript" szó a saját sorában megtalálható a / ^ JavaScript $ / reguláris kifejezés használatával. Ha egyetlen "Java" szót szeretne találni (és nem előtagot, például a "JavaScript" szóban), próbálja meg használni a / \ sJava \ s / mintát, amely szóközt igényel a szó előtt és után.

De ez a megoldás két problémát vet fel. Először is csak akkor találja meg a "Java" szót, ha mindkét oldalon szóköz veszi körül, és nem találja a sor elején vagy végén. Másodszor, ha ez a minta egyezik, az általa visszaadott karakterlánc kezdő és záró szóközöket tartalmaz, ami nem pontosan az, amit szeretnénk. Tehát a szóközökkel megegyező minta helyett olyan mintát (vagy horgonyt) használunk, amely megfelel a szóhatárok \ b. A következő kifejezés jelenik meg: / \ bJava \ b /.

A \ B horgonyelem egy olyan pozícióhoz illeszkedik, amely nem szóhatár. Vagyis a / \ Bcript / minta illeszkedik a "JavaScript" és az "postscript" szavakhoz, és nem egyezik a "script" vagy a "Scripting" szavakkal.

Horgonyfeltételként tetszőleges reguláris kifejezések is használhatók. Ha egy kifejezést a karakterek közé tesz ((= = And)), akkor az a következő karakterekkel szembeni előnézeti egyezéssé válik, és megköveteli, hogy ezek a karakterek illeszkedjenek a megadott mintához, de ne szerepeljenek az egyezési karakterláncban.

Például, ha egy közös programozási nyelvre szeretne egyezést találni, amelyet kettőspont követ, használja az / ava (cript)? (? = \ :) / kifejezést. Ez a minta egyezik a "JavaScript" szóval a "JavaScript: The Definitive Guide" karakterláncban, de nem egyezik a "Java" szóval a "Java dióhéjban" karakterláncban, mert nem kettőspont következik.

Ha beírja a feltételt (?!, Akkor az negatív karakter lesz a következő karakterekhez, és megköveteli, hogy a következő karakterek ne egyezzenek meg a megadott mintával. Például: / Java (?! Script) (\ w *) / megegyezik a "Java" allánccal, és utána nagybetűés tetszőleges számú ASCII szöveges karakter, feltéve, hogy a "Java" alláncot nem követi a "Script" allánc. Ez megegyezik a "JavaBeans" karakterlánccal, de nem a "jávai" karakterlánccal, de a "JavaScrip" karakterlánccal, de nem a "JavaScript" vagy "JavaScripter" karakterlánccal.

Az alábbi táblázat felsorolja a reguláris kifejezés rögzítő karaktereit:

Reguláris kifejezés horgony karakterek
Szimbólum Jelentése
^ Megfelel egy karakterlánc kifejezés kezdetének vagy egy karakterlánc elejének egy többsoros keresésben.
$ Egy soros kifejezés végén vagy egy karakterlánc végén egyezik egy többsoros keresésben.
\ b Szóhatárnak felel meg, azaz megegyezik a \ w és \ W, illetve a \ w és a karakterlánc eleje vagy vége közötti pozícióval. (Ne feledje azonban, hogy a [\ b] megegyezik a Backspace karakterrel.)
\ B Megfelel egy olyan pozíciónak, amely nem szóhatár.
(? = p) Pozitív előnézeti ellenőrzés a következő karakterekre. Követeli, hogy a későbbi karakterek illeszkedjenek a p -hez, de nem tartalmazza ezeket a karaktereket a talált karakterláncban.
(?! p) Negatív előnézeti ellenőrzés a következő karakterekre. Követeli, hogy a következő karakterek ne egyezzenek.

Zászlók

És még egy, a reguláris kifejezés nyelvtanának utolsó eleme. A reguláris kifejezés jelzői magas szintű mintaegyezési szabályokat adnak meg. A reguláris kifejezés nyelvtanának többi részétől eltérően a zászlókat nem a perjel karakterek között, hanem a második után kell megadni. A JavaScript három zászlót támogat.

Zászló i megadja, hogy a mintaegyezésnek meg kell különböztetnie a kis- és nagybetűket, és zászló g- hogy a keresés globális legyen, azaz a karakterlánc összes egyezését meg kell találni. Zászló m mintázatot keres többsoros módban. Ha a keresett karakterlánc -kifejezés sorbeviteli karaktereket tartalmaz, akkor ebben az üzemmódban a ^ és $ horgonykarakterek amellett, hogy megfelelnek a teljes karakterlánc -kifejezés kezdetének és végének, minden szöveges karakterlánc elejére és végére is illeszkednek. Például a / java $ / im egyezik a "java" és a "Java \ nis fun" kifejezésekkel is.

Ezek a zászlók bármilyen kombinációban kombinálhatók. Például, ha a "java" szó (vagy "Java", "JAVA", stb.) Első előfordulását kis- és nagybetűkre érzékeny módon keresi, használhatja a / \ bjava \ b / i kis- és nagybetűkre érzéketlen reguláris kifejezést. És ha meg szeretné találni ennek a szónak az összes előfordulását egy karakterláncban, hozzáadhatja a g: / \ bjava \ b / gi jelzőt.

String osztály módszerek a minta illesztéséhez

Eddig tárgyaltuk a generált regexp nyelvtanát, de nem néztük meg, hogy a regexp valójában hogyan használható a JavaScriptben. Ebben a részben a String objektum módszereit tárgyaljuk, amelyek szabályos kifejezéseket használnak a mintaegyezéshez, valamint a kereséshez és a cseréhez. Ezután a RegExp objektumot, annak metódusait és tulajdonságait vizsgálva folytatjuk a szabályos kifejezésekkel történő mintaegyeztetésről szóló vitánkat.

A karakterláncok négy módszert támogatnak reguláris kifejezések használatával. Ezek közül a legegyszerűbb a módszer keresés ()... Rendszeres kifejezést vesz fel argumentumként, és vagy a megtalált allánc első karakterének pozícióját adja vissza, vagy -1 -et, ha nem talált egyezést. Például a következő hívás visszatér 4:

Var result = "JavaScript" .search ( / script / i); 4

Ha a search () metódus argumentuma nem reguláris kifejezés, akkor először úgy alakítja át, hogy átadja a RegExp konstruktornak. A search () metódus nem támogatja a globális keresést, és figyelmen kívül hagyja a g zászlót.

Módszer cserélni () keresési és cserélési műveletet hajt végre. Első érvként egy reguláris kifejezést, másodikként egy helyettesítő karakterláncot vesz fel. A metódus megkeresi azt a sort, amelyre hívják, hogy megfeleljen a megadott mintának.

Ha a reguláris kifejezés tartalmazza a g jelzőt, akkor a substit () metódus lecseréli a találatokat a helyettesítő karakterlánccal. Ellenkező esetben csak az első találatot helyettesíti. Ha a helyettesítő () metódus első argumentuma egy karakterlánc, és nem egy reguláris kifejezés, akkor a metódus szó szerinti keresést hajt végre a karakterláncban, ahelyett, hogy a RegExp () konstruktorral keresőként () alakítaná át reguláris kifejezéssé módszer igen.

Példaként a helyettesítő () metódussal következetesen nagybetűvel írhatjuk a "JavaScript" szót egy teljes szövegsorban:

// Függetlenül a karakterek kis- és nagybetűitől, cserélje le egy szóval a szükséges esetben var result = "javascript" .replace (/ JavaScript/ ig, "JavaScript");

A helyettesítés () metódus erősebb, mint ez a példa sugallja. Hadd emlékeztessem önöket arra, hogy a szabályos kifejezésen belüli zárójeles részkifejezések balról jobbra vannak számozva, és hogy a reguláris kifejezés megjegyzi az egyes részkifejezéseknek megfelelő szöveget. Ha a helyettesítő karakterlánc tartalmaz egy $ -ot, amelyet egy számjegy követ, a helyettesítés () metódus a két karaktert a megadott alkifejezésnek megfelelő szöveggel helyettesíti. Ez egy nagyon hasznos funkció. Használhatjuk például arra, hogy a karakterláncban lévő egyenes idézeteket tipográfiai idézőjelekre cseréljük, amelyeket ASCII karakterek szimulálnak:

// Az idézet idézet, amelyet tetszőleges számú idézőjel nélküli karakter követ (emlékezünk rájuk), // ezeket a karaktereket egy másik idézet követi var quote =/ "([^"] *) "/ g; // Cserélje le az egyenes idézeteket tipográfiai idézőjelekre, és hagyja változatlanul a "$ 1" // az idézet tartalmát a $ 1 var text = "" JavaScript "egy értelmezett programozási nyelvben."; Var result = text.replace (quote, " "$ 1" "); //" JavaScript "egy értelmezett programozási nyelv.

Fontos megjegyezni, hogy a második argumentum a () helyett olyan függvény lehet, amely dinamikusan kiszámítja a helyettesítő karakterláncot.

Módszer mérkőzés () a String osztály reguláris kifejezési módszerei közül a leggyakoribb. Egyetlen reguláris kifejezést vesz egyetlen argumentumként (vagy az argumentumát szabályos kifejezéssé alakítja át, ha átadja a RegExp () konstruktornak), és a keresési eredményeket tartalmazó tömböt adja vissza. Ha a g zászló be van állítva a reguláris kifejezésben, akkor a metódus egy tömböt ad vissza a karakterlánc összes egyezéséből. Például:

// visszaadja ["1", "2", "3"] var result = "1 plusz 2 egyenlő 3" .match (/ \ d +/ g);

Ha a reguláris kifejezés nem tartalmazza a g jelzőt, a match () metódus nem hajt végre globális keresést; csak az első meccset keresi. A match () azonban akkor is tömböt ad vissza, ha a módszer nem hajt végre globális keresést. Ebben az esetben a tömb első eleme a talált sztring, a többi elem pedig a reguláris kifejezés részkifejezése. Ezért, ha a match () egy arr tömböt ad vissza, akkor az arr a teljes talált karakterláncot tartalmazza, az arr az első részkifejezésnek megfelelő alstringet tartalmazza stb. A helyettesítés () metódussal párhuzamosan azt mondhatjuk, hogy az arr [n] tele van $ n tartalmával.

Például nézze meg a következő kódot az URL elemzéséhez:

Var url = /(\w+):\/\/((\w.tory+)\/(\S*)/; var text = "Látogassa meg webhelyünket http: //www..php"; var eredmény = text.match (url); if (eredmény! = null) (var fullurl = eredmény; // Tartalmaz "http: //www..php" var protokoll = eredmény; // Tartalmaz "http" var host = result; // Tartalmaz "www..php ")

Meg kell jegyezni, hogy egy olyan reguláris kifejezés esetében, amely nem rendelkezik g globális keresési jelzővel, a match () metódus ugyanazt az értéket adja vissza, mint a reguláris kifejezés exec () metódusa: a visszaadott tömb index- és bemeneti tulajdonságokkal rendelkezik, mint az alábbiakban az exec () tárgyalásában leírtuk.

A reguláris kifejezéseket használó String objektum metódusai közül az utolsó az hasított ()... Ez a metódus az argumentumot elválasztóként felosztja a karakterláncot, amelyhez meghívták. Például:

"123,456,789" .split (","); // Visszaadja ["123", "456", "789"]

A split () metódus reguláris kifejezést is vehet argumentumként. Ez erősebbé teszi a módszert. Megadhat például egy elválasztót, amely tetszőleges számú szóköz karaktert engedélyez mindkét oldalon:

"1, 2, 3, 4, 5". Osztás ( / \ s *, \ s * /); // Visszaadja ["1", "2", "3", "4", "5"]

RegExp objektum

Amint említettük, a reguláris kifejezéseket RegExp objektumokként ábrázoljuk. A RegExp () konstruktoron kívül a RegExp objektumok három módszert és számos tulajdonságot támogatnak.

A RegExp () konstruktor egy vagy két karakterlánc argumentumot vesz fel, és létrehoz egy új RegExp objektumot. A konstruktor első érve a reguláris kifejezés törzsét tartalmazó karakterlánc, azaz azt a szöveget, amelynek a regex literálban a perjel karakterek között kell megjelennie. Ne feledje, hogy a karakterlánc -literálok és a reguláris kifejezések a \ karaktert használják a menekülési szekvenciák jelölésére, ezért amikor a reguláris kifejezést karakterlánc -literálként továbbítja a RegExp () konstruktornak, mindegyiket \ egy \\ párra kell cserélnie.

A RegExp () második argumentuma hiányozhat. Ha meg van adva, akkor a reguláris kifejezés zászlajait határozza meg. A g, i, m karakterek egyike vagy ezek kombinációja kell, hogy legyen. Például:

// Megkeresi a karakterlánc összes 5 jegyű számát. Megjegyzés // a \\ var zipcode = new RegExp használata ("\\ d (5)", "g");

A RegExp () konstruktor akkor hasznos, ha a reguláris kifejezés dinamikusan generálódik, ezért nem ábrázolható a reguláris kifejezés literális szintaxisával. Például a felhasználó által megadott karakterlánc megkereséséhez rendszeres kifejezést kell létrehoznia futás közben a RegExp () használatával.

RegExp tulajdonságok

Minden RegExp objektum öt tulajdonsággal rendelkezik. Ingatlan forrás- csak olvasható karakterlánc, amely a reguláris kifejezés szövegét tartalmazza. Ingatlan globális - boolean Csak olvasható jelző, amely a reguláris kifejezés g jelzőjét határozza meg. Ingatlan ignoreCase egy csak olvasható logikai érték, amely meghatározza, hogy az i jelző jelen van-e a reguláris kifejezésben. Ingatlan többsoros egy csak olvasható logikai érték, amely meghatározza az m zászló jelenlétét a reguláris kifejezésben. És az utolsó ingatlan lastIndex olvasási / írási egész szám. A g zászlóval rendelkező minták esetében ez a tulajdonság tartalmazza a pozíció számát abban a karakterláncban, amelynél a következő keresést el kell kezdeni. Az alábbiakban leírtak szerint az exec () és a test () metódusok használják.

RegExp módszerek

A RegExp objektumok két módszert határoznak meg, amelyek végrehajtják a mintaegyeztetést; a String osztály fent leírt módszereihez hasonlóan viselkednek. A mintaegyezéshez használt RegExp osztály fő módszere a exec ()... Hasonló a String osztály korábban említett match () metódusához, azzal a különbséggel, hogy ez a RegExp osztály metódusa, amely egy karakterláncot vesz fel argumentumként, és nem a String osztály metódusa, amely RegExp argumentumot vesz fel.

Az exec () metódus szabályos kifejezést hajt végre a megadott karakterláncon, azaz egyezést keres egy karakterláncban. Ha nem talál egyezést, a metódus null értéket ad vissza. Ha azonban egyezést talál, akkor ugyanazt a tömböt adja vissza, mint a match () metódussal visszaadott tömb a g jelzés nélküli kereséshez. A tömb nulla eleme tartalmazza a reguláris kifejezésnek megfelelő karakterláncot, az összes későbbi elem pedig az összes részkifejezésnek megfelelő allánc. Ezen kívül az ingatlan index tartalmazza a karakter pozíciószámát, amellyel a megfelelő töredék kezdődik, és a tulajdonságot bemenet a keresett karakterláncra utal.

A match () -tól eltérően az exec () metódus olyan tömböt ad vissza, amelynek szerkezete nem függ a g zászló jelenlététől a reguláris kifejezésben. Hadd emlékeztessem önöket, hogy egy globális reguláris kifejezés átadásakor a match () metódus a talált egyezések tömbjét adja vissza. Az exec () pedig mindig egy egyezést ad vissza, de erről tájékoztat teljes információt... Amikor az exec () függvényt meghívjuk a g jelzőt tartalmazó reguláris kifejezésre, a metódus a reguláris kifejezés objektumának lastIndex tulajdonságát a talált karakterláncot közvetlenül követő karakter pozíciószámára állítja.

Amikor az exec () metódust másodszor is meghívjuk ugyanarra a reguláris kifejezésre, akkor elkezdi keresni azt a karaktert, amelynek pozíciója az lastIndex tulajdonságban van megadva. Ha az exec () nem talál egyezést, akkor az lastIndex tulajdonság értéke 0 (bármikor beállíthatja a lastIndex értékét nullára is, amit minden esetben meg kell tenni, ha a keresés befejeződik az utolsó sorban, ugyanazon a soron talált, és elkezd keresni egy másik karakterláncon ugyanazzal a RegExp objektummal.) Ez a speciális viselkedés lehetővé teszi, hogy az exec () ismételten meghívásra kerüljön a karakterlánc összes reguláris kifejezés egyezése között. Például:

Var minta = / Java / g; var text = "A JavaScript viccesebb, mint a Java!"; var eredmény; while ((eredmény = minta.exec (szöveg))! = null) (console.log ("Talált" " + eredmény +" "" + "a" + result.index + "pozícióban; a következő keresés" + "karakterrel kezdődik minta .lastIndex);)

A RegExp objektum másik módja - teszt () ami sokkal egyszerűbb, mint az exec () metódus. Egy karakterláncot vesz fel, és igaz értéket ad vissza, ha a karakterlánc megfelel egy reguláris kifejezésnek:

Var minta = / java / i; pattern.test ("JavaScript"); // Igaz

A hívó teszt () egyenértékű az exec () hívásával, amely igaz értéket ad vissza, ha az exec () nem null értéket ad vissza. Emiatt a test () metódus ugyanúgy viselkedik, mint az exec () metódus, amikor globális reguláris kifejezést igényel: elkezdi keresni a megadott karakterláncot a lastIndex tulajdonság által megadott helyen, és ha talál egyezést, a lastIndex tulajdonság a karakter pozíció számához, közvetlenül a talált egyezés mellett. Ezért a test () metódus használatával hurkot is létrehozhat egy sor áthaladásához, mint az exec () metódussal.

új RegExp (minta [, zászlók])

regex ELŐTT

Ismeretes, hogy preferált szó szerinti szintaxis( / teszt / i).

Ha a reguláris kifejezés nem ismert előre, akkor célszerű a reguláris kifejezést (karakterláncban) az (új RegExp) konstruktor használatával létrehozni.

De vigyázzon, mivel az "előretörés" \ a kódváltás szerepét tölti be, ezért a karakterláncban (új RegExp) kétszer kell írni: \\

Zászlók

figyelmen kívül hagyom a kis- és nagybetűket

g globális egyezés, szemben a helyi (alapértelmezés szerint csak a minta első példányával egyező) engedélyezi a minta összes példányának egyezését

Üzemeltetők

Mit Hogyan Leírás Használat
én zászló reg. a kifejezés megkülönbözteti a kis- és nagybetűket / testik / i
g zászló globális keresés / testik / g
m zászló párosítható a textarea -ból lekérhető számos karakterlánccal
karakterosztály operátor karakterkészlet illesztése - bármely karakter az a -tól z -ig;
^ operátor caret kivéve [^ a -z] - bármely karakter, kivéve az a -tól z -ig terjedő karaktereket;
- kötőjel operátor az értéktartományt tüntesse fel, beleértve - bármely karakter az a -tól z -ig;
\ menekülő operátor menekül a következő karakterek elől \\
^ match start operátor a mintaegyeztetésnek az elején kell megtörténnie / ^ testik / g
$ meccs végén operátor a minta illesztésének a végén kell megtörténnie / testik $ / g
? operátor? választhatóvá teszi a karaktert / t? est / g
+ kezelő + / t + est / g
+ kezelő + a szimbólumnak egyszer vagy többször meg kell jelennie / t + est / g
* operátor * a szimbólumnak egyszer vagy többször meg kell jelennie, vagy egyáltalán nem / t + est / g
{} operátor () rögzített számú ismétlést állítson be / t (4) est / g
{,} operátor (,) állítsa be a karakter ismétlések számát bizonyos határokon belül / t (4,9) est / g

Előre meghatározott karakterosztályok

Előre meghatározott tag Összehasonlítás
\ t vízszintes fül
\ n Vonalfordítás
. Bármilyen karakter, kivéve a sorcsatornát
\ d Bármely tizedik számjegy, amely ugyanaz, mint
\ D A tizedik számjegytől eltérő karakter, amely megegyezik a [^ 0-9] karakterrel
\ w Bármilyen karakter (számok, betűk és aláhúzás), amelyek azonosak
\ W A számok, betűk és aláhúzás kivételével bármely más karakter, amely megegyezik a [^ A-Za-z0-9]
\ s Bármilyen szóköz
\ S Bármilyen karakter, nem szóköz
\ b Szóhatár
\ B NEM szóhatár, hanem belső. rész

Csoportosítás ()

Ha egy operátort, például + ( / (abcd) + /) szeretne alkalmazni egy tagcsoportra, használhat zárójelet ().

Rögzítés

A szabályos kifejezés zárójelben () lévő részét nevezzük rögzítés.

Tekintsük a következő példát:

/ ^ () k \ 1 /

\ 1 nem a, b, c karakter.
\ 1 bármely karakter, amely elindítja egyezik az első karakterrel... Vagyis a \ 1 -el egyező karakter ismeretlen, amíg a regex fel nem oldódik.

Nem rögzített csoportok

A zárójeleket () 2 esetben használják: csoportosításhoz és elköteleződéshez. De vannak olyan helyzetek, amikor a () kifejezést csak csoportosításra kell használnunk, mivel nincs szükség kötelezettségvállalásra, ráadásul a felesleges kötelezettségvállalások eltávolításával megkönnyítjük a reguláris kifejezés feldolgozó motorját.

Tehát megakadályozza az elkövetést a nyitó zárójel előtt be kell írnia:?:

Str = "

Helló világ!
"; talált = str.match (/<(?:\/?)(?:\w+)(?:[^>] *?)> / i); console.log ("talált javítás nélkül:", talált); // ["
" ]

Teszt funkció

Regexp.test ()

A tesztfüggvény ellenőrzi, hogy a reguláris kifejezés megfelel -e a (str) karakterláncnak. Igaz vagy hamis értéket ad vissza.

Használati példa:

Javascript

függvény codeF (str) (return /^\d(5)-\d(2)/.test(str);) //console.log(codeF("12345-12ss ")); // true //console.log(codeF("1245-12ss ")); // hamis

Egyezés funkció

str.match (regexp)

Az egyezés függvény érték tömböt ad vissza, vagy ha nem talált egyezést, akkor null értéket ad vissza. Nézd meg: ha a g jelző nincs jelen a reguláris kifejezésben (globális keresés végrehajtásához), akkor az egyezési módszer visszaadja a karakterlánc első egyezését, míg, mint a példából látható, egyezési tömbben rögzüljön(a reguláris kifejezés zárójelbe tett része).

Javascript

str = "További információ: 3.4.5.1. fejezet"; re = / head (\ d + (\. \ d) *) / i // kötelezettségvállalásokkal (nincs globális zászló) found = str.match (re) console.log (found); // ["3.4.5.1. Fejezet", "3.4.5.1.", ".1"]

Ha megadja a match () metódust egy globális reguláris kifejezéssel (g zászlóval), akkor egy tömb is visszatér, hanem GLOBAL meccsekkel... Vagyis a lekötött eredmények nem kerülnek visszaadásra.

Javascript

str = "További információ: 3.4.5.1. fejezet, 7.5. fejezet"; re = / head (\ d + (\. \ d) *) / ig // nem vállal kötelezettséget - globálisan megtalálható = str.match (re) console.log (talált); // ["3.4.5.1. Fejezet", "7.5. Fejezet"]

Exec függvény

regexp.exec (str)

A exec függvény ellenőrzi, hogy a reguláris kifejezés megfelel -e a karakterláncnak (str). Az eredmények tömbjét (véglegesítéssel) vagy null értéket adja vissza. Minden további hívás a végrehajtási metódushoz (például amikor a használatakor) történik (miatt automatikus frissítés amikor végrehajtja az index végrehajtását az utolsó keresés végén lastIndex) lépjen a következő globális egyezésre (ha a g jelölő be van jelölve).

Javascript

var html = "
BAM! INGYENÉLŐ!
"; 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 "," "] * /

Globális zászló nélkül az egyezési és végrehajtási módszerek azonos módon működnek. Vagyis egy tömböt adnak vissza az első globális mérkőzéssel, és vállalják.

Javascript

// egyezés var html = "
BAM! INGYENÉLŐ!
"; var reg = /<(\/?)(\w+)([^>] *?)> /; // nincs globális konzol.log (html.match (reg)); // ["
"," "," div "," class = "test" "] // exec var html ="
BAM! INGYENÉLŐ!
"; var reg = /<(\/?)(\w+)([^>] *?)> /; // nincs globális konzol.log (reg.exec (html)); // ["
"," "," div "," class = "test" "]

Csere funkció

str.replace (regexp, newSubStr | függvény)
  • regexp - reg. kifejezés;
  • newSubStr - az a sor, amelyre a szövegben található kifejezés megváltozik;
  • függvény - minden változó paraméterlistával talált egyezéshez (emlékezzen arra, hogy a karakterláncban végzett globális keresés megtalálja a mintaegyezés összes példányát).

Ennek a függvénynek a visszatérési értéke helyettesítésként szolgál.

Funkció paraméterek:

  • 1 - Teljes illesztett allánc.
  • 2 - A zárójel -csoportok (rögzítések) jelentése.
  • 3 - A mérkőzés indexe (pozíciója) az eredeti karakterláncban.
  • 4 - Az eredeti húr.

A módszer nem változtatja meg a hívó karakterláncot, de az egyezések cseréje után újat ad vissza. Globális keresés és csere végrehajtásához használja a regexp parancsot a g zászlóval.

"GHGHGHGTTTT" .replace (// g, "K"); // "KKKKKKKKKKKK"

Javascript

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

Utolsó frissítés: 2015.11.1

Rendszeres kifejezések karakterlánc kereséséhez vagy módosításához használt mintát képviselik. A JavaScript reguláris kifejezésekkel való munkához egy objektum van definiálva RegExp.

A reguláris kifejezés kétféleképpen határozható meg:

Var myExp = / hello /; var myExp = new RegExp ("hello");

Az itt használt reguláris kifejezés meglehetősen egyszerű: egyetlen "hello" szóból áll. Az első esetben a kifejezést két előrevetett perjel közé helyezzük, a második esetben pedig a RegExp konstruktőrt használjuk, amelyben a kifejezést karakterláncként adjuk át.

RegExp módszerek

Annak megállapításához, hogy egy reguláris kifejezés megfelel -e egy karakterláncnak, a teszt () metódust a RegExp objektum határozza meg. Ez a módszer igaz értéket ad vissza, ha a karakterlánc megfelel a reguláris kifejezésnek, és hamis, ha nem.

Var initialText = "hello world!"; var exp = / hello /; var eredmény = exp.test (kezdeti szöveg); document.write (eredmény + "
"); // true initialText =" beautifull wheather "; result = exp.test (initialText); document.write (eredmény); // false - nincs" hello "a kezdeti szöveg sorban

Az exec módszer hasonlóan működik - azt is ellenőrzi, hogy a karakterlánc megfelel -e a reguláris kifejezésnek, csak most ez a metódus adja vissza a karakterláncnak azt a részét, amely megfelel a kifejezésnek. Ha nincs egyezés, akkor a null értéket adja vissza.

Var initialText = "hello world!"; var exp = / hello /; var eredmény = exp.exec (kezdeti szöveg); document.write (eredmény + "
"); // hello initialText =" beautifull wheather "; result = exp.exec (initialText); document.write (eredmény); // null

Karaktercsoportok

A reguláris kifejezésnek nem kell szabályos karakterláncoknak lennie, de tartalmazhat speciális reguláris kifejezés szintaktikai elemeket is. Ezen elemek egyike szögletes zárójelben lévő karaktercsoportokat jelent. Például:

Var initialText = "védekezés"; var exp = / [abc] /; var eredmény = exp.test (kezdeti szöveg); document.write (eredmény + "
"); // true initialText =" city "; result = exp.test (initialText); document.write (eredmény); // hamis

Az [abc] kifejezés azt jelzi, hogy a karakterláncnak három betűből kell állnia.

Ha meg kell határoznunk a karakterlánc egy bizonyos tartományából származó betűket, akkor ezt a tartományt egyszer beállíthatjuk:

Var initialText = "védekezés"; var exp = / [a-z] /; var eredmény = exp.test (kezdeti szöveg); document.write (eredmény + "
"); // true initialText =" 3di0789 "; result = exp.test (initialText); document.write (eredmény); // false

Ebben az esetben a karakterláncnak tartalmaznia kell legalább egy karaktert tartomány a-z.

Ha éppen ellenkezőleg, nem szükséges, hogy a karakterlánc csak bizonyos karaktereket tartalmazzon, akkor a ^ jelet szögletes zárójelbe kell tenni a karakterek felsorolása előtt:

Var initialText = "védekezés"; var exp = / [^ a-z] /; var eredmény = exp.test (kezdeti szöveg); document.write (eredmény + "
"); // hamis kezdeti szöveg =" 3di0789 "; exp = / [^ 0-9] /; eredmény = exp.test (kezdeti szöveg); document.write (eredmény); // igaz

Az első esetben a karakterlánc nem tartalmazhat csak karaktereket az az tartományból, de mivel a "defenses" karakterlánc csak ebből a tartományból származó karakterekből áll, a test () metódus hamis értéket ad vissza, vagyis a reguláris kifejezés nem egyezik a Készlet.

A második esetben ("3di0789") a karakterlánc nem tartalmazhat csak numerikus karaktereket. De mivel a karakterlánc betűket is tartalmaz, a karakterlánc megegyezik a reguláris kifejezéssel, így a tesztmódszer igaz értéket ad vissza.

Szükség esetén összegyűjthetjük a kifejezések kombinációit:

Var initialText = "otthon"; var exp = / [dt] o [nm] /; var eredmény = exp.test (kezdeti szöveg); document.write (eredmény); // igaz

A [dt] o [nm] kifejezés azokat a karakterláncokat jelöli, amelyek tartalmazhatnak "house", "volume", "don", "tone" karakterláncokat.

Kifejezési tulajdonságok

    A globális tulajdonság lehetővé teszi, hogy megtalálja a reguláris kifejezésnek megfelelő összes alláncot. Alapértelmezés szerint az alláncok keresésekor a reguláris kifejezés kiválasztja az első talált alláncot a kifejezésnek megfelelő karakterláncból. Bár egy karakterláncban sok olyan karakterlánc lehet, amely szintén megfelel a kifejezésnek. Ehhez ezt a tulajdonságot a g szimbólum formájában használják a kifejezésekben

    Az ignoreCase tulajdonság lehetővé teszi, hogy a reguláris kifejezésnek megfelelő alláncokat keressen, függetlenül a karakterlánc karaktereitől. Ehhez az i karaktert használják a reguláris kifejezésekben

    A többsoros tulajdonság lehetővé teszi olyan alláncok keresését, amelyek megfelelnek a többsoros szöveg reguláris kifejezésének. Ehhez az m szimbólumot használják a reguláris kifejezésekben.

Például:

Var initialText = "hello world"; var exp = / világ /; var eredmény = exp.test (kezdeti szöveg); // hamis

A karakterlánc és a kifejezés között nincs egyezés, mivel a "világ" abban az esetben különbözik a "világtól". Ebben az esetben módosítania kell a reguláris kifejezést az ignoreCase tulajdonság hozzáadásával:

Var exp = / world / i;

Nos, egyszerre több ingatlant is használhatunk.