Kötőjel a halmazokon belül a JavaScript reguláris kifejezéseiben
A kötőjel szintén speciális karakter a [ ] halmazon belül
(kívül viszont nem). Ha a kötőjelre van szükséged, mint karakterre,
akkor helyezd oda, ahol nem fogják csoportelválasztóként
értelmezni.
Miért fontos ez: létrehozhatsz egy karaktercsoportot anélkül, hogy
észrevennéd. Például így - '[:-@]' - azt hiszed, hogy a
kettőspontot, a kötőjelet és a kukacot választod ki, de
valójában a : és a @ közötti karakterek csoportját kapod.
Ehhez a csoporthoz a következő karakterek tartoznak: ? < = > : ;
Honnan jönnek ezek? Az ASCII táblázatból - a kettőspontnak kisebb a sorszáma, mint a kukacnak - és így jön létre a csoport. Vagyis minden csoport az ASCII tábla szerint jön létre (ezt hasznosíthatod is, ha akarod).
Hogyan kezeljük ezt: helyezd a kötőjel karaktert oda,
ahol biztosan nem fogják csoportként értelmezni,
például az elejére vagy a végére
(vagyis a [ után vagy a ] előtt).
A kötőjelet escape-elheted is - ekkor
önmagát fogja jelölni, függetlenül a
helyzetétől. Például a [:-@] helyett írj
[:\-@] - és már nem lesz csoport, hanem
három karakter lesz - kettőspont, kötőjel és kukac
@.
Példa
A következő példában a keresési minta a következő:
1 szám, majd 'a' és
'z' közötti betű, majd 2 szám:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[a-z]2/g, '!');
Ennek eredményeképpen a változóba a következő íródik:
'! 1-2 ! !'
Példa
Most escape-eljük a kötőjelet. Ennek eredményeképpen
a keresési minta a következő: 1 szám, majd
'a' betű, vagy kötőjel, vagy 'z' betű,
majd 2 szám:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[a\-z]2/g, '!');
Ennek eredményeképpen a változóba a következő íródik:
'! ! 1c2 !'
Példa
Egyszerűen áthelyezhetjük a kötőjelet anélkül, hogy escape-elnénk:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[az-]2/g, '!');
Ennek eredményeképpen a változóba a következő íródik:
'! ! 1c2 !'
Példa
A következő példában a keresési minta a következő:
az első karakter kisbetűk vagy
kötőjel '-', majd két 'x' betű:
let str = 'axx Axx -xx @xx';
let res = str.replace(/[a-z-]xx/g, '!');
Ennek eredményeképpen a változóba a következő íródik:
'! Axx ! @xx'
Példa
A következő példában a keresési minta a következő:
az első karakter kis- vagy nagybetűk,
vagy kötőjel '-', majd két 'x' betű:
let str = 'axx Axx -xx @xx';
let res = str.replace(/[a-zA-Z-]xx/g, '!');
Ennek eredményeképpen a változóba a következő íródik:
'! ! ! @xx'
Példa
A kötőjelet két csoport közé is helyezhetjük - ott biztosan nem fog még egy csoportot létrehozni:
let str = 'axx 9xx -xx @xx';
let res = str.replace(/[a-z-0-9]xx/g, '!');
Ennek eredményeképpen a változóba a következő íródik:
'! ! ! @xx'
Gyakorlati feladatok
Adott egy sztring:
let str = 'xaz xBz xcz x-z x@z';
Találd meg az összes sztringet a következő minta szerint:
'x' betű, nagy vagy kis
betű vagy kötőjel, 'z' betű.
Adott egy sztring:
let str = 'xaz x$z x-z xcz x+z x%z x*z';
Találd meg az összes sztringet a következő minta szerint:
'x' betű, majd vagy dollár, vagy
kötőjel vagy plusz, majd 'z' betű.