Windows - Reguláris kifejezések - folytatás

JavaScript suli 8. rész

forráskód letöltése
Ebben a részben elmélyedünk a reguláris kifejezések használatában. Példákat láthatunk a különféle illesztésekre, és megismerkedünk a végrehajtási sorrenddel, valamint a keresést segítő és megvalósító speciális objektumokkal is.
A mellékelt állományban példákat láthatunk az illesztésre, illetve a reguláris kifejezések objektumainak használatára.
Végrehajtási sorrend
Amikor létrehozunk egy reguláris kifejezést, akkor a kiértékelési folyamat az aritmetikai kifejezésekhez hasonlóan balról jobbra történik, a végrehajtási sorrend szerint.
Az alábbi tábla illusztrálja felülről lefelé a különféle reguláris kifejezések operátorainak végrehajtási sorrendjét:
Operátorok Leírás
\ Escape
(), (?:), (?=), [] Zárójelek
*, +, ?, {n}, {n,}, {n,m} Összegzők
^, $, \metakarakter Rögzítő elemek, sorozatok
| Választó
A karakterek előrébb állnak a sorban, mint a választó operátor (|), amely lehetővé teszi "ny|kakas" esetén "ny" vagy "kakas" illesztését. Ahhoz, hogy, a "nyakas" vagy a "kakas" illesztését megadjuk, használjunk zárójelet, hogy alkifejezést tudjunk létrehozni, amely így néz ki ebben az esetben:"(ny|k)akas"
Általános karakterek
Az általános karakterek azokat a nyomtatható és nem nyomtatható karaktereket jelentik, amelyeket közvetlenül nem jelzünk meta-karakterekként. Ezek tartalmazzák mindegyik kis- és nagybetűs karaktert, számokat, pontot, pontosvesszőt, stb., és néhány szimbólumot.
A legegyszerűbb formátuma egy reguláris kifejezésnek egy egyszerű, általános karakter, amely illeszkedik önmagára egy keresett szövegben. Például az egykarakteres "A" minta illeszkedik az "A" betűre, amely a keresett szövegben megjelenik. Íme néhány példa az egykarakteres reguláris kifejezés mintákra:
/a/
/7/
/M/
Kombinálhatunk több egyedi karaktert, hogy azok nagyobb kifejezéssé álljanak össze.
/a7M/
Figyeljük meg, hogy nincs összegző operátor. Csak annyit kell tennünk, hogy valamennyi karaktert egymás mögé írjuk.
Számos meta-karakter létezik, amelyek speciális bánásmódot igényelnek, amikor megpróbáljuk illeszteni őket. Ahhoz, hogy ezeket a karaktereket illesszük, szükséges eléjük egy backslash karaktert helyeznünk. Ezek a karakterek a következők:
$ ( ) * + . [ ] ? \ / ^ { } |
Példák
/a.c/
A pont bármi lehet, kivéve az új sor karaktere. Ez megfelelhet pl. "abc", "a1c", "a#c" karaktersorozatoknak.
/fájlneve\.kit/
Ez megfelel a megadott fájlnév, ".", kiterjesztés karakterének. Így tudunk közvetlenül fájlra illeszteni.
/[1-5]\. fejezet/
Ez a sorozat megfelelhet az "1. fejezet", "2. fejezet", ..., "5. fejezet" karaktersorozatoknak.
/[A-Za-z0-9]/
Ez a minta illeszkedik bármely kis- és nagybetűs, valamint számokból álló karaktersorozatra.
/\d{2}-\d{5}/
Egy azonosító számra illeszkedik, amely két számjegyből, egy kötőjelből, majd újabb öt számból áll. A "\d" szám-karakterre illeszkedik, "{2}" jelentése az, hogy pontosan kétszer illeszkedik. A kötőjel egy általános karakter. Az újabb öt számnál hasonló a helyzet, mint az első kettőnél.
A RegExp objektum
A RegExp egy belső globális objektum, amely információkat tárol a reguláris kifejezések mintaillesztési eredményeiről.
Használata:
RegExp.tulajdonsag
A RegExp objektum direktben nem hozható létre, de mindig elérhető aktuális használatra. Amíg egy tökéletes reguláris kifejezés mintaillesztése meg nem történik, addig a különféle tulajdonságok kezdeti értékei a következők lehetnek:
Tulajdonság Rövidített Kezdeti érték Leírás
index nincs -1 Az első illeszkedés pozícióját adja vissza a keresett szövegben.
input $_ üres sztring Azt a szöveget adja vissza, amelyen a reguláris kifejezés-keresést kezdeményeztük.
lastIndex nincs -1 A következő illesztés pozíciója.
lastMach $& üres sztring Az utolsó illesztett karaktersorozatot adja vissza.
lastParen $+ üres sztring Az utolsó zárójeles illesztést adja vissza.
leftContext $` üres sztring A keresett szöveg eleje és az utolsó illesztés eleje közötti karaktersorozatot adja vissza.
rightContext $' üres sztring Az utolsó illesztést követő pozíció, és a szöveg vége közötti karaktersorozat.
$1-$9 $1-$9 üres sztring A legfrissebb kilenc tárolt szakaszt adja vissza, amelyet az illesztés talált.
Ezek a tulajdonságok undefined értékűek egészen addig, amíg egy reguláris kifejezés illesztést végre nem hajtunk.
A globális RegExp objektumot ne keverjük össze a Regular Expression objektummal. Azt gondolnánk hangzás alapján, hogy ugyanarról a dologról van szó, azonban mégsem. A globális RegExp objektum tulajdonságai folytonosan változó információkat tartalmaznak minden illesztés alkalmával, amíg a Regular Expression objektum tulajdonságai csak arról az illesztésről tárolnak információkat, amely az objektum adott példánya esetében történt.
Regular Expression objektum
Egy olyan objektum, amely reguláris kifejezésmintákat tartalmaz a hozzájuk kapcsolható flag-ekkel, amelyek azonosítják, hogy hogyan történjen meg az illesztés.
Első fajta szintaxis:
re = /minta/[flag-ek]
Második fajta szintaxis:
re = new RegExp("minta",["flag-ek"])
A minták a következők lehetnek (kombinálhatók):
  • g (global: globális keresés minden minta előfordulására)
  • i (ignoreCase: kis- és nagybetűs különbségek figyelmen kívül hagyása)
  • m (multiline: többsoros keresés)
A Regular Expression objektumok tárolják a mintákat, amelyeket keresünk. Miután a Regular Expression objektum létrejön, tartalma egyben átadódhat egy sztring műveletnek, vagy egy sztring átadásra kerülhet valamely reguláris kifejezés-műveletnek.
Használjuk az első szintaxist abban az esetben, ha már előre tudjuk a keresőszöveget. A második forma akkor eredményes, amikor a keresőszöveg gyakran változik, vagy ismeretlen, mint pl. amikor a felhasználói input-ból származik.
A minta a használat előtt fordítódik le. Az első szintaxis esetében a Script betöltésekor történik a fordítás. A második esetben a minta közvetlenül a használat előtt fordítódik le, vagy amikor a compile metódus meghívásra kerül.

Javascript suli cikksorozat