Introductie tot reguliere expressies in JavaScript
Reguliere expressies zijn commando's voor complex zoeken en vervangen (of gewoon zoeken). Ze maken heel interessante dingen mogelijk, maar zijn helaas behoorlijk moeilijk om onder de knie te krijgen.
Er zijn verschillende JavaScript-methoden voor
het werken met reguliere expressies. We beginnen
kennis te maken met ze aan de hand van het voorbeeld replace
- je bent al bekend met deze methode: de eerste
parameter is wat vervangen moet worden, en de tweede
- door wat te vervangen. En de methode zelf wordt
toegepast op de string waarin de vervanging
plaatsvindt:
'bab'.replace('a', '!'); // retourneert 'b!b'
Als eerste parameter van deze methode kan men
niet alleen een string doorgeven, maar ook een reguliere expressie.
Een reguliere expressie is een reeks
commando's, geplaatst tussen schuine strepen /. Deze
schuine strepen worden scheidingstekens van reguliere
expressies genoemd.
De reguliere expressies zelf bestaan uit twee soorten tekens: uit die welke zichzelf vertegenwoordigen en uit teken-commando's, die speciale tekens worden genoemd.
Letters en cijfers vertegenwoordigen zichzelf. In het volgende
voorbeeld vervangen we met behulp van een reguliere expressie
de letter 'a' door !:
'bab'.replace(/a/, '!'); // retourneert 'b!b'
Maar een punt is een speciaal teken
en vertegenwoordigt elk willekeurig teken. In het volgende
voorbeeld zoeken we een string volgens dit patroon:
letter 'x', dan elk willekeurig teken, dan
weer de letter 'x':
'xax eee'.replace(/x.x/, '!'); // retourneert '! eee'
Na de scheidingstekens kunnen modifiers
worden geschreven - commando's die de algemene eigenschappen
van de reguliere expressie wijzigen. Bijvoorbeeld, de modifier
g schakelt de modus voor globaal zoeken
en vervangen in - zonder deze zoekt de reguliere expressie alleen
de eerste overeenkomst, en met deze - alle overeenkomsten.
In het volgende voorbeeld is de modifier
g niet opgegeven en zal de reguliere expressie alleen de eerste
overeenkomst vinden:
'aab'.replace(/a/, '!'); // retourneert '!ab'
En nu vindt de reguliere expressie alle overeenkomsten:
'aab'.replace(/a/g, '!'); // retourneert '!!b'
Gegeven een string:
let str = 'ahb acb aeb aeeb adcb axeb';
Schrijf een reguliere expressie die de strings
'ahb', 'acb', 'aeb'
vindt volgens het patroon: letter 'a', elk willekeurig teken,
letter 'b'.
Gegeven een string:
let str = 'aba aca aea abba adca abea';
Schrijf een reguliere expressie die de strings
'abba', 'adca', 'abea'
vindt volgens het patroon: letter 'a', 2
willekeurige tekens, letter 'a'.
Gegeven een string:
let str = 'aba aca aea abba adca abea';
Schrijf een reguliere expressie die de strings
'abba' en 'abea' vindt, zonder
'adca' te vangen.