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 |
---|---|
g | Lehető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ó). |
én | Lehetővé teszi a kis- és nagybetűk megkülönböztetését ( figyelmen kívül hagyja a kisbetűs zászlót). |
m | Az 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ó). |
u | A minta Unicode kódpontok sorozataként lesz értelmezve ( unicode zászló). |
y | Az 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ólum | Leírás |
---|---|
. | Egy karaktert talál a karakteren kívül új sor, vagy sorvégi karakter (\ n, \ r, \ u2028 vagy \ u2029). |
\ d | Megkeresi a számjegy karakterét az alap latin ábécében. Karakterkészlet használatával egyenértékű. |
\ D | Minden olyan karaktert megtalál, amely nem számjegy az alap latin ábécében. A [^ 0-9] karakterkészlettel egyenértékű. |
\ s | Egyetlen 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]. |
\ S | Egyetlen 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). |
\ n | Megkeresi az újsoros karaktert. |
\ f | Megkeresi az oldalcsatorna karakterét. |
\ r | Keresi a kocsi visszatérési karakterét. |
\ t | Vízszintes lapkaraktert keres. |
\ v | Függőleges tabulátorkaraktert keres. |
\ w | Bármilyen alfanumerikus karaktert talál az alap latin ábécében, beleértve az aláhúzást is. Karakterkészlettel egyenértékű. |
\ W | Bármilyen karaktert keres, amely nem alapvető latin ábécé karakter. A [^ a-Za-z0-9_] karakterkészlettel egyenértékű. |
\ cX | Egy 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. |
\ xhh | Karaktert keres hexadecimális értékkel (hh egy kétjegyű hexadecimális érték). |
\ uhhhh | Karaktert 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ólum | Leí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 | y | Az egyezés a megadott alternatívák bármelyikével történik. |
Csoportosítás és visszacsatolások
Szimbólum | Leí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. |
\ n | Visszaté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.)
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:
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:
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 = "
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 ")); // hamisEgyezé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 = "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 = "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); // borderTopWidthUtolsó 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.