Windows - Reguláris kifejezések

Javascript suli 7. rész

A reguláris kifejezések szövegrészletek illesztésére használatosak, leginkább a UNIX gépeken találkozhatunk a fogalommal. A JScript nyelvben is használhatunk illesztéseket. Sorozatunk mostani részében ezekkel a kifejezésekkel, használatukkal kezdünk el ismerkedni.
Amikor a parancssort használva egy mappa tartalmát listázzuk, akkor a "*" és "?" karakterek segítségével egyszerre több karaktert tudunk behelyettesíteni. Például a "kep?.*" formula minden olyan fájlra igaz lesz, amelynek neve négy karakteres, első három karaktere a "kep" szó, a következő karaktere bármi, és a kiterjesztésre nincs megkötés. A reguláris kifejezések működése hasonlít a csillag és kérdőjel karakterek használatára, persze ennél sokkal többre képesek.
Egy keresésben általában egy konkrét szöveget adunk meg feltételként. Ez a legegyszerűbb esetekben eredményes lehet, de hiányzik belőle a rugalmasság, a dinamikusság. A reguláris kifejezések ezzel szemben a következőkre képesek:
  • Ellenőrizni tud egy mintát a szövegen belül. Például ellenőrizni tudja, hogy egy számsorozat szerepel-e egy telefonszámot tartalmazó mezőben. Ezt adatérvényesítésnek is nevezhetjük.
  • Szövegbehelyettesítés. Azonosítani tudunk szövegrészleteket, amelyeket azután vagy törlünk, vagy más szövegrészre módosíthatunk.
  • Kiemelhetünk karaktersorozatot string-ből, egy bizonyos minta megfeleltetése alapján. Megadott szöveget kereshetünk dokumentumban, vagy beviteli mezőben.
A reguláris kifejezés egy szövegminta, amely általános és speciális (meta) karaktereket egyaránt tartalmaz. A minta leír egy vagy több karaktersorozatot, amely a szövegben való kereséskor megfeleltethető. Hasonlóképpen kell megszerkeszteni, mint ahogy egy aritmetikus kifejezést szoktunk. Kisebb kifejezések kombinálhatók operátorokkal és metakarakterekkel, így bonyolultabb kifejezésekhez jutunk. Egy határoló páros közé kell elhelyeznünk a reguláris kifejezést. Ez a határoló a JScript-ben az osztás (/) jele.
/kifejezes/
A minta a RegExp objektum Pattern tulajdonságában tárolódik. A reguláris kifejezés állhat egyedi karakterekből, karaktercsoportokból, karaktertartományból (pl. a-tól f-ig), válogatott karakterekből, és mindezek kombinációjából.
Az alábbi táblázat tartalmazza a teljes meta karakterlistát, és annak környezetét a reguláris kifejezések esetében:
Karakter Leírás
\ Azt jelöli, hogy a következő karakter speciális karakter lesz. Pl. \n jelentése: új sor.
^ Leképezi a beviteli szöveg kezdő pozícióját.
$ Leképezi a beviteli szöveg végének pozícióját.
* Leképezi a megelőző karaktert, vagy kifejezésrészletet egyszer sem, vagy akár többször is. Pl. xy* leképezi az "x"-et és az "xyy"-t is. Megfelel a {0,} kifejezésnek.
+ Leképezi a megelőző karaktert, vagy kifejezésrészletet egyszer, vagy akár többször is. Pl. xy+ leképezi az "xy"-t és az "xyy"-t is, de az "x"-et nem. Megfelel a {1,} kifejezésnek.
? Leképezi a megelőző karaktert, vagy kifejezésrészletet egyszer sem, vagy egyszer. Pl. xy? leképezi az "x"-et és az "xy"-t is. Megfelel a {0,1} kifejezésnek.
{n} n egy nem negatív egész. Pontosan n-szer illeszkedik. Például 'u{2}' nem illeszkedik a "rum" karaktersorozatra, de a "vákuum"-ra igen.
{n,} n egy nem negatív egész. Legalább n-szer illeszkedik. Például 'u{2,}' nem illeszkedik a "rum" karaktersorozatra, de a "vákuuuuuum"-ra igen. Az 'u{1,}' azonos az 'u+'-al. Az 'u{0,}' pedig azonos az 'u*'-al.
{n,m} n és m nem negatív egész, ahol n <= m. Legalább n-szer, legfeljebb m-szer illeszkedik. Például "u{1,3}" illeszkedik az első három u-ra a "vákuuuuuum"-ban. Az 'u{0,1}' megfelel az 'u?'-nek. Vigyázzunk arra, hogy üres karakter nem lehet a vessző és a számok között.
? Amikor ez a karakter azonnal követi a következő karaktereket (*, +, ?, {n}, {n,}, {n,m}) akkor a ? egy un. nem falánk karakter. Ez azt jelenti, hogy a lehető legkisebb mértékben illeszkedik, ahol az alapértelmezett falánk minta annyiszor illeszkedik, ahányszor csak lehet. Például egy "oooo" sorozat esetében a 'o+?' egyedüli "o"-ra illeszkedik, amíg az 'o+' valamennyi "o"-ra.
. Illeszkedik minden egyedi karakterre a '\n'-t kivéve. Ahhoz, hogy bármely karakterre illeszkedjen, amely '\n'-t tartalmaz, használjunk ilyen mintát: '[\s\S].
(minta) Illeszkedik a mintára, és lelopja az illesztett tartalmat. A lelopott tartalom elérhető az eredmény gyűjtemény segítségével, a $0...$9 tulajdonságok segítségével JScript-ben. Ahhoz, hogy zárójel karaktereket feleltessünk meg, használjuk a '\(' és '\)' karaktersorozatot.
(?:minta) Illeszkedik a mintára, de nem lopja le az illesztést. Ez használható arra, hogy kombináljunk részeket az "or" karakterrel (|). Például, 'industr(?:y|ies) egy sokkal gazdaságosabb kifejezés az 'industry|industries'-nél.
(?=minta) Előretekintő illesztése a keresett string-nek bármely ponton, ahol egy string nem illeszkedik a minta kezdetének. Ez nem lelopó illesztés. Például 'Windows (?!95|98|NT|2000)' illeszkedik a "Windows"-ra " Windows 2000"-ben de nem illeszkedik a "Windows"-ra a "Windows 3.1"-ben. Az előretekintés nem emészti fel a karaktereket, miután egy illesztés történt, a keresés, a következő illesztésre kezdődik közvetlenül a következő utolsó illesztéssel, nem pedig a karakterrel, amely magában foglalja az előtte állót.
(?!minta) Ellentétes előretekintő illesztése a keresett string-nek bármely ponton, ahol egy string nem illeszkedik a minta kezdetének. Ez nem lelopó illesztés. Például 'Windows (?!95|98|NT|2000)' illeszkedik a "Windows"-ra "Windows 3.1"-ben de nem illeszkedik a "Windows"-ra a "Windows 2000"-ben. Az előretekintés nem emészti fel a karaktereket, miután egy illesztés történt, a keresés, a következő illesztésre kezdődik közvetlenül a következő utolsó illesztéssel, nem pedig a karakterrel, amely magában foglalja az előtte állót.
x|y Illeszti az x-et és y-t egyaránt. Például a "z|sapka" illeszti a "z"-t, vagy a "sapka"-t. '(z|s)apka' illeszti a "zapka"-t, vagy "sapka"-t.
[xyz] Egy karaktersorozat illesztés. Illeszkedik minden karakterre, amely benne van. Például az '[^abc]' illeszti az 'a'-t a "papír"-ra.
[^xyz] Egy ellentétes karaktersorozat illesztés. Illeszkedik minden karakterre, amely nincs benne. Például az '[^abc]' illeszti a 'p'-t a "papír"-ra.
[a-z] Megadott karakter tartomány. Illeszkedik bármely karakterre a megadott tartományon belül. Például az [a-z] illeszkedik bármely karakterre az 'a' és 'z' között.
[^a-z] Ellentétes területe a megadott karaktereknek. Minden karakterre illeszkedik, amely nincs a meghatározott hatókörben. Például a '[^a-z]' illeszkedik bármely karakterre, amely nincs az 'a' és 'z' között.
\b Illeszkedik egy szó határra, amely a szó és a szöveg közötti pozíció. Például a 'er\b' illeszkedik az 'er'-re a "never"-ben, de nem illeszkedik a "verb"-re.
\B Illeszkedik egy nem szó határra. 'er\B' illeszkedik az 'er'-re a "verb"-ben, de nem illeszkedik a "never"-re.
\cx Illeszkedik az x-el jelölt vezérlő karakterre. Például a \cM megfelel a Control-M, vagy kocsi vissza karakternek. Az x értéknek az A-Z és a-z között kell lennie. Ha nem, akkor a c egy szöveges 'c' karakter.
\d Illeszkedik szám karakterre. Azonos ezzel: [0-9]
\D Illeszkedik a nem szám karakterre. Azonos ezzel: [^0-9]
\f Illeszkedik a lapdobás karakterre. Azonos a következőkkel: \x0c és \cL
\n Illeszkedik az új sor karakterre. Azonos a következőkkel: \x0a és \cJ
\r Illeszkedik a kocsi vissza karakterre. Azonos a következőkkel: \x0d és \cM
\s Illeszkedik bármely szóköz karakterre. Ilyen lehet a space, tab, lapdobás, és hasonlók. Azonos a következővel: [\f\n\r\t\v]
\S Illeszkedik minden nem szóköz karakterre. Azonos a következővel: [^\f\n\r\t\v]
\t Illeszkedik egy tab karakterre. Azonos a következőkkel: \x09 és \cI
\v Illeszkedik egy vertikális tab karakterre. Azonos a következőkkel: \x0b és \cK
\w Megfelel bármely szó karakternek aláhúzás jellel együtt. Azonos a következővel: '[A-Za-z0-9_]'
\W Megfelel bármely nem szó karakternek. Azonos a következővel: '[^A-Za-z0-9_]'
\xn Illeszkedik n-re, ahol n hexadecimális escape érték. Hexa értéknek két betű hosszúnak kell lennie. Pl. '\x41' megfelel "A"-nak.
\num Illeszkedik a num-ra, ahol a num pozitív egész. Egy visszahivatkozás a befogott illesztésre. Például a '(.)\1' megfelel két egymást követő azonos karakternek.
\n Lehet egy oktális érték, de visszahivatkozás is. Ha \n megelőz legalább n befogott alkifejezést, akkor az n visszahivatkozás. Egyébként az n egy oktális escape érték, ha n (0-7) közötti.
\nm Lehet oktális escape érték vagy egy visszahivatkozás. Ha a \nm-et megelőzi legalább nm befogott alkifejezés, akkor nm visszahivatkozás. Ha \nm-et megelőzi legalább n, akkor n visszahivatkozás, m pedig betű szerinti m. Ha egyik megelőző feltétel sem igaz, akkor \nm oktális escape érték, ahol n és m (0-7) közötti érték.
\nml Oktális escape érték illeszkedése, ahol n (0-3) közötti és m és l oktális értékek (0-7)
\un Illeszkedik az n Unicode karakter, ahol értéke négy hexadecimális jel.

Javascript suli cikksorozat