[[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