Reguláris kifejezésekkel szövegkeresési mintákat írhatunk le, ezen minták karakterláncokban karakterkombinációk megfeleltetésére használhatók. Egyik leggyakoribb felhasználása az űrlapok beviteli mezőinek ellenőrzése; például megvizsgálhatjuk, hogy a megadott e-mail cím formátuma megfelelő-e. A JS 1.2 és későbbi verzióiban van támogatás reguláris kifejezések használatára. JavaScriptben a reguláris kifejezések is objektumok. A RegExp beépített prototípus szolgál ezen kifejezések kezelésére, egy RegExp objektum egy megadott kifejezés mintáját tartalmazza. Rendelkezik olyan tulajdonságokkal és eljárásokkal, amelyek használatával karakterláncokban kereséseket és a találatok szövegcseréjét is elvégezheti.
Reguláris kifejezést kétféleképpen hozhatunk létre:
A RegExp konstruktorfüggvényével:
(A kapcsolókról később még lesz bővebben.) A konstruktor használata futásidejű fordítást szolgáltat a reguláris kifejezés számára. Akkor érdemes használni, ha előre tudjuk, hogy a reguláris kifejezés mintája meg fog változni, vagy ha más forrásból érkezik, például felhasználói adatbevitelből, mivel az így megadott minta minden egyes hivatkozáskor újra kiértékelődik.
Objektum inicializáló használatával:
Ebben az esetben a reguláris kifejezés előfordítódik, ha a reguláris kifejezés változatlan marad, a jobb teljesítmény érdekében ezt a megoldást érdemes használni.
Egy reguláris kifejezés állhat egyszerű karakterekből, vagy egyszerű és speciális karakterek kombinációjából.
Az egyszerű mintákat közvetlen megfeleltetésre használjuk. Például a /men/ minta csak azoknak a karakterláncokban található karakterkombinációknak felel meg, ahol a "men" karakterek pontosan így, és ebben a sorrendben szerepelnek. Azaz, a megfeleltetés sikeres lesz a "Laci elment bevásárolni" karakterlánc esetén, viszont a "Nem engedem" karakterláncnál már nem, mivel ez nem tartalmazza pontosan a /men/ szövegrészt.
Természetesen gyakran a közvetlen megfeleltetésnél bonyolultabb keresési módokra van szükség, ezeket segítik a speciális karakterek. Például megadhatjuk, hogy az "m" után az "en" karakterek tetszőleges távolságra, de mindenképp benne legyenek a karakterláncban. Ennek megadása: /m*en/. A * jelenti azt, hogy az "m" karaktert 0 vagy több karakter követi, majd az "en" karakterek. Ekkor a "Nem engedem" szövegnél is sikeres lesz a megfeleltetés.
A következő táblázatban a reguláris kifejezésekben előfordulható speciális karakterek vannak felsorolva.
karakter | jelentése |
\ | Vagy azt jelzi, hogy a következő karakter különleges és ne legyen betű szerint értelmezve (például az ‘s' karakterből a ‘\s' üres karaktert jelentő különleges karaktert hoz létre), vagy egy különleges karaktert alakít át úgy, hogy betű szerint legyen értelmezve (például a ‘\*' a ‘*' karaktert jelenti) |
^ | sor elejét egyezteti |
$ | sor végét egyezteti |
* | a megelőző karakter 0 vagy többszöri előfordulását írja elő |
+ | a megelőző karakter 1 vagy többszöri előfordulását írja elő |
? | a megelőző karakter 0 vagy egyszeri előfordulását írja elő |
. | tetszőleges karakter egyszeri előfordulása |
{ } | a megelőző karakter többszöri ismétlődését írja elő {n} pontosan n db előfordulás {n,m} n és m közötti előfordulás {n,} n vagy többszöri előfordulás |
( ) | a zárójelben lévő mintának megfelelő szöveget megjegyzi, lehetővé téve a későbbi felhasználását |
[ ] | a zárójelben megadott karakterhalmaz egy elemének előfordulását írja elő [n,m] n vagy m bármelyike [n-m] n és m közötti tartomány bármelyike [^n,m] inverz; bármi, csak nem n vagy m |
| | a két oldalán álló minták egyikének előfordulását írja elő (“vagy”) |
[\b] | visszatörlés karakter előfordulását írja elő |
\cX | kontrollkarakter előfordulását írja elő |
\d | számjegy előfordulását írja elő, megegyezik a következővel: [0-9] |
\D | az előző tagadása, azaz [^0-9] |
\n | soremelés előfordulását írja elő |
\f | lapdobás előfordulását írja elő |
\t | tabulátor előfordulását írja elő |
\v | vertikális tabulátor előfordulását írja elő |
\r | kocsivissza előfordulását írja elő |
\s | üres karakter előfordulását írja elő, azaz [ \f\t\v\r\n] |
\S | az előző tagadása, azaz [^ \f\t\v\r\n] |
\w | betű, számjegy vagy aláhúzás, azaz [0-9a-zA-Z_] |
\W | az előző tagadása, azaz [^0-9a-zA-Z_] |
A reguláris kifejezéseknek van két opcionálisan használható kapcsolójuk, amelyek lehetővé teszik a globális és kis- és nagybetű-érzéketlen keresést. A globális kereséshez a 'g', a kis- és nagybetű-érzéketlen kereséshez pedig az 'i'kapcsoló használható. Ezek a kapcsolók használhatók külön, vagy együtt. A kapcsolók a reguláris kifejezés részei, később el nem vehetők, és hozzá sem adhatók.
Reguláris kifejezéseket a RegExp objektum test és exec eljárásai, valamint a String objektum match, replace, search, és split eljárásai használnak.
eljárás neve | leírása | egyszeru példa a használatára |
test | Letesztel egy egyezést egy karatkerláncon, visszatérési értéke true vagy false. (RegExp objektum eljárása.) | reg = /^.+@.+\..{2,6}$/; reg.test(“kati@mail.hu”) Megvizsgálja, hogy a paraméterként kapott sztring e-mail formátumú-e. |
exec | Keresést hajt végre egy karakterláncban, visszatérési értéke egy eredménytömb. (RegExp objektum eljárása.) | reg =/a(b+)a/g; array = reg.exec("cabbabsbz"); A ‘aba', ‘abba', ‘abbba', stb. minták keresése a kapott sztringben. |
match | Keresést hajt végre egy karakterláncban, visszatérési értéke egy eredménytömb, vagy ha nincs egyezés, null. (String objektum eljárása.) | str=”88sd433 p23ko"; array=str.match(/\d+\s/g); Olyan mintát keres, ahol egy vagy több számjegyet üres karakter követ. |
replace/td> | Keresést hajt végre egy karakterláncban, és az egyező szövegrészeket lecseréli az adott karakterláncra. (String objektum eljárása.) | str=”hehe hee hee”; str.replace(/e+/,'a'); Eredménye: “haha ha ha” |
search | Letesztel egy egyezést egy karatkerláncon, visszatérési értéke az egyezés indexe, vagy -1, ha nincs egyezés. (String objektum eljárása.) | reg=/^a(b+)a/g; int=reg.exec("abbabsbz"); Eredménye: 0. Mivel a reguláris kifejezés ‘^'-vel kezdődik, csak a sztring elején lehet egyezés. |
split | Egy reguláris kifejezést vagy egy karakterláncot használ egy adott karakterlánc tördelésére és tömbbe helyezésére. (String objektum eljárása.) | array=str.split(/\s|;/); A pontosvesszővel vagy üres karakterrel elválasztott karakterláncokat a tömbbe helyezi. |
Egy reguláris kifejezés mintában foglalt zárójelpár hatására a megfelelő egyezésrész megjegyződik. Például, az /a(b)c/ megfelel az 'abc' karaktereknek és a 'b' megjegyződik. A megjegyzett zárójelezett szövegrész-megfeleltetések visszahívásához a RegExp objektum $1, ..., $9 tulajdonságai, vagy az Array [1], ..., [n] elemek használhatóak. A következő szkript a replace eljárást használja karakterláncban szavak cseréjéhez. A kicserélendő szöveghez a szkript a $1 és $2 tulajdonságok értékeit használja.
Eredménye: "Zsusa, Kiss"
A JavaScript egyik leggyakoribb felhasználási területe az űrlapok beviteli mezőinek ellenőrzése. Ha a mezők ellenőrzése csak szerveroldalon történne, minden egyes hiba észrevételekor az űrlapot vissza kéne küldeni, ezzel feleslegesen terhelve a hálózatot, és fogyasztva az időt. A mezők helyességének ellenőrzéséhez reguláris kifejezéseket használunk. Az alábbi függvényeket a fejrészben definiáljuk, majd a Submit gomb lenyomásakor (onSubmit) meghívjuk, így az űrlap elküldése előtt még ellenőrzi a mezők tartalmát.
1. Név beviteli mező tartalmának ellenőrzése: a reguláris kifejezésből látható, hogy a név egy nemüres karaktersorozat, melyben szerepelhetnek: betű, számjegy, szóköz, aposztróf, kötőjel.
2. A telefonszám ellenőrzése a következőképpen zajlik: először kiszedjük az elválasztójelek mindegyikét (ezért kell a '/g' kapcsoló), majd ellenőrizzük a test függvénnyel, hogy csak számjegyek szerepelnek-e benne.
3. Az következő függvényben szereplő minta jelentése: 1 vagy több bármilyen karakter, majd @ jel, aztán megint 1 vagy több bármilyen karakter, egy pont és utána 2-tol 6 hosszúságú karakterlánc.
Hasznos linkek: