Yhdysmerkki joukkojen sisällä JavaScriptin säännöllisissä lausekkeissa
Yhdysmerkki - myös erikoismerkki [ ]:n sisällä
(mutta ulkopuolella - ei). Jos tarvitset yhdysmerkin itsessään
symbolina - aseta se paikkaan,
jossa se ei tulkita ryhmän erottajaksi.
Miksi tämä on tärkeää: voit luoda merkkiryhmän
huomaamatta sitä. Esimerkiksi,
näin - '[:-@]' - luulet valitsevasi kaksoispisteen, yhdysmerkin ja @-merkin, mutta
itse asiassa saadaan merkkiryhmä välillä
: ja @. Tähän ryhmään kuuluvat
seuraavat merkit: ? < = > : ;
Mistä ne ovat peräisin? ASCII-taulukosta - kaksoispisteellä on pienempi numero kuin @-merkillä - ja niin muodostuu ryhmä. Eli kaikki ryhmät muodostuvat ASCII-taulukon mukaan (haluttaessa tätä voidaan hyödyntää).
Kuinka torjua tätä: aseta yhdysmerkki
paikkaan, jossa sitä ei varmasti tulkita
ryhmäsymboliksi, esimerkiksi alkuun tai loppuun
(eli [:n jälkeen tai ennen ]:tä).
Yhdysmerkin voi myös escapeta - silloin
se tarkoittaa itseään riippumatta
asemasta. Esimerkiksi, [:-@]:n sijaan kirjoita
[:\-@] - eikä ryhmää enää ole, vaan
on kolme merkkiä - kaksoispiste, yhdysmerkki ja @-merkki
@.
Esimerkki
Seuraavassa esimerkissä hakumalli on seuraava:
numero 1, sitten kirjain väliltä 'a'
'z':aan, sitten numero 2:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[a-z]2/g, '!');
Tuloksena muuttujaan kirjoitetaan seuraava:
'! 1-2 ! !'
Esimerkki
Escapeetaan nyt yhdysmerkki. Tuloksena
hakumalli on seuraava: numero 1, sitten
kirjain 'a', tai yhdysmerkki, tai kirjain 'z',
sitten numero 2:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[a\-z]2/g, '!');
Tuloksena muuttujaan kirjoitetaan seuraava:
'! ! 1c2 !'
Esimerkki
Yhdysmerkin voi yksinkertaisesti siirtää, escapetta sitä:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[az-]2/g, '!');
Tuloksena muuttujaan kirjoitetaan seuraava:
'! ! 1c2 !'
Esimerkki
Seuraavassa esimerkissä hakumalli on seuraava:
ensimmäinen merkki on pieniä kirjaimia tai
yhdysmerkki '-', sitten kaksi kirjainta 'x':
let str = 'axx Axx -xx @xx';
let res = str.replace(/[a-z-]xx/g, '!');
Tuloksena muuttujaan kirjoitetaan seuraava:
'! Axx ! @xx'
Esimerkki
Seuraavassa esimerkissä hakumalli on seuraava:
ensimmäinen merkki on pieniä, suuria
kirjaimia tai yhdysmerkki '-', sitten kaksi kirjainta
'x':
let str = 'axx Axx -xx @xx';
let res = str.replace(/[a-zA-Z-]xx/g, '!');
Tuloksena muuttujaan kirjoitetaan seuraava:
'! ! ! @xx'
Esimerkki
Yhdysmerkin voi sijoittaa kahden ryhmän väliin - siellä se varmasti vielä tee toista ryhmää:
let str = 'axx 9xx -xx @xx';
let res = str.replace(/[a-z-0-9]xx/g, '!');
Tuloksena muuttujaan kirjoitetaan seuraava:
'! ! ! @xx'
Käytännön tehtävät
Annettu merkkijono:
let str = 'xaz xBz xcz x-z x@z';
Etsi kaikki merkkijonot seuraavan mallin mukaan:
kirjain 'x', iso tai pieni
kirjain tai yhdysmerkki, kirjain 'z'.
Annettu merkkijono:
let str = 'xaz x$z x-z xcz x+z x%z x*z';
Etsi kaikki merkkijonot seuraavan mallin mukaan:
kirjain 'x', sitten joko dollarimerkki, tai
yhdysmerkki tai plusmerkki, sitten kirjain 'z'.