Bindestreg i sæt i regulære udtryk i JavaScript
Bindestreg - også et specialtegn inde i [ ]
(men udenfor - ikke). Hvis du har brug for selve
bindestregen som symbol - så placer den der,
hvor den ikke vil blive opfattet som adskiller
for en gruppe.
Hvorfor det er vigtigt: du kan lave en gruppe
af symboler, uden at du selv opdager det. For eksempel,
sådan her - '[:-@]' - du tror, at du
vælger kolon, bindestreg og at-tegn, men i
virkelighed viser det sig at være en gruppe af symboler mellem
: og @. Denne gruppe inkluderer
følgende symboler: ? < = > : ;
Hvor kommer de fra? Fra ASCII-tabellen - kolon har et mindre nummer end at-tegn - og det bliver til en gruppe. Det vil sige, alle grupper opstår i henhold til ASCII-tabellen (hvis ønsket, kan dette bruges).
Hvad man kan gøre ved det: placer bindestreg-symbolet
der, hvor det helt sikkert ikke vil blive opfattet som
et gruppesymbol, for eksempel i starten eller i slutningen
(altså efter [ eller før ]).
Man kan også escape bindestregen - så
vil den betyde sig selv uanset
positionen. For eksempel, i stedet for [:-@] skrive
[:\-@] - og der vil ikke være nogen gruppe, men
der vil være tre symboler - kolon, bindestreg og at-tegn
@.
Eksempel
I det følgende eksempel er søgemønsteret sådan:
ciffer 1, derefter bogstav fra 'a'
til 'z', derefter ciffer 2:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[a-z]2/g, '!');
Resultatet i variablen vil være følgende:
'! 1-2 ! !'
Eksempel
Lad os nu escape bindestregen. Resultatet
bliver at søgemønsteret er sådan: ciffer 1, derefter
bogstav 'a', eller bindestreg, eller bogstav 'z',
derefter ciffer 2:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[a\-z]2/g, '!');
Resultatet i variablen vil være følgende:
'! ! 1c2 !'
Eksempel
Man kan blot flytte bindestregen, uden at escape den:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[az-]2/g, '!');
Resultatet i variablen vil være følgende:
'! ! 1c2 !'
Eksempel
I det følgende eksempel er søgemønsteret sådan:
det første symbol er små bogstaver eller
bindestreg '-', derefter to bogstaver 'x':
let str = 'axx Axx -xx @xx';
let res = str.replace(/[a-z-]xx/g, '!');
Resultatet i variablen vil være følgende:
'! Axx ! @xx'
Eksempel
I det følgende eksempel er søgemønsteret sådan:
det første symbol er små, store
bogstaver eller bindestreg '-', derefter to bogstaver
'x':
let str = 'axx Axx -xx @xx';
let res = str.replace(/[a-zA-Z-]xx/g, '!');
Resultatet i variablen vil være følgende:
'! ! ! @xx'
Eksempel
Man kan placere bindestregen mellem to grupper - der vil den helt sikkert ikke lave endnu en gruppe:
let str = 'axx 9xx -xx @xx';
let res = str.replace(/[a-z-0-9]xx/g, '!');
Resultatet i variablen vil være følgende:
'! ! ! @xx'
Praktiske opgaver
Givet en streng:
let str = 'xaz xBz xcz x-z x@z';
Find alle strenge efter følgende mønster:
bogstav 'x', stort eller lille
bogstav eller bindestreg, bogstav 'z'.
Givet en streng:
let str = 'xaz x$z x-z xcz x+z x%z x*z';
Find alle strenge efter følgende mønster:
bogstav 'x', derefter enten dollar-tegn,
bindestreg eller plus-tegn, derefter bogstav 'z'.