Koppelteken binnen sets in JavaScript reguliere expressies
Het koppelteken - is ook een speciaal teken binnen [ ]
(maar buiten [ ] - niet). Als je het koppelteken zelf nodig hebt
als teken - plaats het dan waar het niet wordt geïnterpreteerd als scheidingsteken
van een groep.
Waarom dit belangrijk is: je kunt per ongeluk een groep
tekens maken. Bijvoorbeeld,
zo - '[:-@]' - je denkt dat je
een dubbele punt, een koppelteken en een apenstaartje selecteert, maar
in werkelijkheid krijg je een groep tekens tussen
: en @. Deze groep bevat
de volgende tekens: ? < = > : ;
Waar komen ze vandaan? Uit de ASCII-tabel - de dubbele punt heeft een lager nummer dan de apenstaart - en zo ontstaat de groep. Dat wil zeggen, alle groepen worden gevormd volgens de ASCII-tabel (je kunt dit gebruiken als je wilt).
Hoe dit op te lossen: plaats het koppelteken
waar het zeker niet wordt gezien als
een groepsscheidingsteken, bijvoorbeeld aan het begin of aan het einde
(dat wil zeggen, na [ of voor ]).
Je kunt het koppelteken ook escapen - dan
zal het zichzelf vertegenwoordigen, ongeacht de
positie. Bijvoorbeeld, in plaats van [:-@] schrijf
[:\-@] - en dan is er geen groep meer, maar
zijn er drie tekens - dubbele punt, koppelteken en apenstaartje
@.
Voorbeeld
In het volgende voorbeeld is het zoekpatroon als volgt:
cijfer 1, dan letter van 'a'
tot 'z', dan cijfer 2:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[a-z]2/g, '!');
Als resultaat wordt het volgende in de variabele opgeslagen:
'! 1-2 ! !'
Voorbeeld
Laten we nu het koppelteken escapen. Als resultaat
is het zoekpatroon als volgt: cijfer 1, dan
letter 'a', of koppelteken, of letter 'z',
dan cijfer 2:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[a\-z]2/g, '!');
Als resultaat wordt het volgende in de variabele opgeslagen:
'! ! 1c2 !'
Voorbeeld
Je kunt het koppelteken eenvoudig verplaatsen zonder het te escapen:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[az-]2/g, '!');
Als resultaat wordt het volgende in de variabele opgeslagen:
'! ! 1c2 !'
Voorbeeld
In het volgende voorbeeld is het zoekpatroon als volgt:
eerste teken - kleine letters of
koppelteken '-', dan twee letters 'x':
let str = 'axx Axx -xx @xx';
let res = str.replace(/[a-z-]xx/g, '!');
Als resultaat wordt het volgende in de variabele opgeslagen:
'! Axx ! @xx'
Voorbeeld
In het volgende voorbeeld is het zoekpatroon als volgt:
eerste teken - kleine letters, hoofdletters
of koppelteken '-', dan twee letters
'x':
let str = 'axx Axx -xx @xx';
let res = str.replace(/[a-zA-Z-]xx/g, '!');
Als resultaat wordt het volgende in de variabele opgeslagen:
'! ! ! @xx'
Voorbeeld
Je kunt het koppelteken tussen twee groepen plaatsen - daar zal het zeker geen extra groep creëren:
let str = 'axx 9xx -xx @xx';
let res = str.replace(/[a-z-0-9]xx/g, '!');
Als resultaat wordt het volgende in de variabele opgeslagen:
'! ! ! @xx'
Praktische opdrachten
Gegeven een string:
let str = 'xaz xBz xcz x-z x@z';
Vind alle strings volgens het volgende patroon:
letter 'x', hoofdletter of kleine
letter of koppelteken, letter 'z'.
Gegeven een string:
let str = 'xaz x$z x-z xcz x+z x%z x*z';
Vind alle strings volgens het volgende patroon:
letter 'x', dan of dollarteken, of
koppelteken of plusteken, dan letter 'z'.