[[oktatas:web:javascript|< JavaScript]] ====== JavaScript Regex ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2015, 2017, 2021 * Licenc: GNU Free Documentation License 1.3 * Web: https://szit.hu ===== Bevezetés ===== A **Regex** a **Regular Expressions** rövidítése, magyarul szabályos kifejezések. A szabályos kifejezések lehetővé teszik karakterek egyeztetését karaktersorozatokban. Használható objektumok és függvények: * RegExp * exec() * test() * String * match() * replace() * search() * split() ===== Szabályos kifejezések készítése ===== A szabályos kifejezések mintáit két / karakter között adjuk meg. A második perjel után módosítók adhatók meg. Szintaxis: /minta/módosítók; A szabályos kifejezések tárolhatók változókban: var szabalyosKifejezes = /ab+/; Létrehozás RegExp() konstruktorral: var szabalyosKifejezes = new RegExp('ab+'); Példa módosítóval: var szabalyosKifejezes = /szit/i; Példa replace() függvénnyel: function noSpace(x){ return x.replace(/ /g, ""); } A példában a npSpace függvény töröl minden szóközt az x-ből. ===== Gyakorlat ===== ==== Igen nem válasz ==== Vizsgáljuk meg, hogy a válasz igen, vagy más. Igennek vesszük, ha a szövegben található (i) betű. var valasz = 'igen'; var valaszMinta = /i/; if (valasz.match(valaszMinta)) { console.log('Ok'); }else { console.log('Nem ok'); } A válaszban valahol szerepelnie kell egy (i) betűnek. Találat esetén egy objektumot kapunk: * ["i", index: 0, input: "igen", groups: undefined] Ha nincs találat: * null Ha az illeszkedést csak akkor szeretnénk, ha az i betű a sor elején van, akkor tegyük egy (^) karaktert az (i) elé. var valaszMinta = /^i/; Ha csak az (i) betűt szeretnénk elfogadni, akkor tegyünk illeszkedést a sor végére is: var valaszMinta = /^i$/; ==== i vagy n ==== Elfogadjuk az (i) és az (n) karaktert. Szögletes zárójelek között megadhatjuk a lehetséges karaktereket. var valaszMinta = /^[in]$/; A szögletes zárójelek között megadott karakterek mindig 1 darab karaktert jelentenek. Esetünkben 1 darab (i) vagy 1 darab (n) betűt. ==== Érdemjegyek vizsgálata ==== Az érdemjegyben szerepelnie kell számoknak. A lehetséges számjegyek csak 1, 2, 3, 4 vagy 5. var valaszMinta = /^[12345]$/; Megadható intervallum formájában is: var valaszMinta = /^[1-5]$/; ===== Módosítók ===== A módosítókat mindig a két (/) karakter után írjuk. A mintailleszkedésen kicsit módosítanak. ^ Módosító ^ Leírás ^ | i | Kis- és nagybetű érzékenység kikapcsolva | | g | globális egyezés, az összes egyezést megkeresi \\ másként csak az elsőként előfordulóra érvényes | | m | Többsoros egyezés | ==== Módosítók gyakorlat ==== A következő példában elfogadjuk a kis és nagy (i) betűket is: var valasz = 'I'; var valaszMinta = /^i$/i; ===== Speciális karakterek a szabályos kifejezésekben ===== ^ Egyezés ^ Leírás ^ | \ | A backslash karakterrel azt mondjuk meg, hogy a következő \\ karakternem nem szeretnénk speciálisként értelmezni | | ^ | Illeszkedés a sor elejére | | $ | Illeszkedés a sor végére | | . | Minden karakterre egyezik az új sor és a kocsi-vissza kivételével | | (x) | Csoportok létrehozása. \\ A csoportokra később hivatkozhatunk \1 az első csoport. \\ \2 a második csoport. | | \w | Egy szó egy karaktere. | | \W | Ami nem egy szó karaktere. | | \d | Számra egyezik. | | \D | Nem számra egyezik. | | \s | White-space karakterre illeszkedik. | | \S | Nem white-space karakterre illeszkedik. | | \b | Szó előtt és szó utáni karakterre illeszkedik. | | \B | Minden ami nem a szó előtt és nem a szó után van. | | \0 | NUL karakter. | | \n | Újsor | | \f | Lapdobás | | \r | Kocsi vissza karakter | | \t | Tabulátor | | \v | Vertikális tabulátor | | \xxx | Karakterkód oktális számmal | | \xdd | Karakterkód hexadecimális számmal | | \uxxxx | Unicode karakter hexadecimálisan | Példa a csoportokra hivatkozásra. var s = "valamiaaaavalami"; alert( /(val)(ami).*\1\2/.test(s) ); A fenti példa true értéket jelenít meg, mivel a "val" és az "ami" szó szerepel a szó elején és a végén is. A \1 az első csoportot jelenti, a \2 a második csoportot. ===== Sokszorozók ===== ^ Szimbólum ^ Leírás ^ | + | Az előtte lévő karakter egyszer vagy többször | | * | Az előtte lévő karakter nullaszor vagy többször | | ? | Az előtte lévő karakter nullaszor vagy egyszer | | {n} | Az előtte lévő karakter pontosan n-szer | | {n,m} | Az előtte lévő karakter n-től m-ig. | | {n,} | Az előtte lévő karakter legalább n-szer. | ===== Karakterosztályok ===== ^ Jelölés ^ Leírás ^ | [abc] | Egyetlen karakter, vagy "a", vagy "b", vagy "c" betű | | [a-z] | Egyetlen karakter a és z között | | [A-Z] | Egyetlen karakter A és Z között | | [^abc] | Egyetlen karakter, amely nem a szögletes zárójelek közötti karakter. Kizárás | Az [a-z.] megegyezik a \w jelöléssel. ===== Vagy ===== ^ Jelölés ^ Leírás ^ | a|b | Vagy "a" vagy "b" | ===== Függvények ===== ^ Függvények ^^ ^ Függvény ^ Leírás ^ ^ RegEx metódusai ^^ | test() | var str = "valami"; \\ var res = /val/.test(str); \\ res értéke true | | exec() | var str = "valami"; \\ var res = /val/.exec(str); \\ res értéke "val" | ^ String metódusai ^^ | match() | var str = "valami"; \\ var res = str.match(/val/); \\ res tartalma: "val", egyébként null | | replace() | var str = "valami"; \\ var res = str.replace(/val/, "---"); \\ res értéke ---ami | | search() | var str = "mégvalami"; \\ var res = str.search(/val/); \\ res eredménye 4 | | split() | var str = "egy:kettő:három"; \\ var res = str.split(/:/); \\ res[1] eredménye "kettő" | ===== Linkek ===== * http://www.w3schools.com/jsref/jsref_obj_regexp.asp * http://www.w3schools.com/js/js_regexp.asp