Reguliere expressies, in de volksmond bekend als "regex" of "regexp", zijn tekenreeksen die een zoekpatroon beschrijven. U kunt reguliere expressies gebruiken om te controleren of een tekenreeks een specifiek patroon bevat, informatie uit een tekenreeks te extraheren en delen van een tekenreeks te vervangen door nieuwe tekst.
Leer de basissyntaxis van reguliere expressies en hoe u deze in JavaScript kunt gebruiken.
De basissyntaxis van reguliere expressies
Er zijn twee manieren waarop u een reguliere expressie in JavaScript kunt maken: door een reguliere expressie letterlijk te gebruiken en door de RegExp constructeur.
Een letterlijke reguliere expressie bestaat uit een patroon tussen schuine strepen, gevolgd door een optionele vlag.
Bijvoorbeeld:
// Zonder vlag
const regexExpressie_1 = /pattern/
// Met vlag
const regexExpressie_2 = /pattern/vlag
Een vlag is een optionele parameter die u aan een reguliere expressie kunt toevoegen om het gedrag ervan te wijzigen. Bijvoorbeeld:
const regexVlag = /the/g;
De G flag geeft aan dat de expressie moet overeenkomen met alle instanties, niet alleen met de eerste.
U kunt ook een reguliere expressie maken met behulp van de RegExp constructeur. Bijvoorbeeld:
const regexExpressie = nieuwRegExp("Patroon", "G");
De RegExp constructor neemt twee parameters: een patroon - een tekenreeks of een letterlijke reguliere expressie - en een vlag (en).
Er zijn twee vrij algemene vlaggen die u zult gebruiken met reguliere expressies in JavaScript:
- G: De globale vlag zorgt ervoor dat de reguliere expressie overeenkomt met alle voorkomens van het patroon in de gegeven tekenreeks in plaats van met één exemplaar.
- i: De niet-hoofdlettergevoelige vlag zorgt ervoor dat de reguliere expressie de hoofdletters en kleine letters in de gegeven tekenreeks negeert.
U kunt vlaggen samen gebruiken in een enkele uitdrukking in elke willekeurige volgorde. Bijvoorbeeld:
const regexExpressie = nieuwRegExp("Patroon", "gi");
Deze uitdrukking komt overeen met alle voorkomens van "Patroon", ongeacht het hoofdlettergebruik.
In reguliere expressies hebben bepaalde tekens, ook wel metatekens genoemd, een speciale betekenis. U kunt ze gebruiken om specifieke soorten karakters of patronen te matchen.
Hier zijn enkele van de meest gebruikte metatekens en hun betekenis:
- Het jokerteken (.): Dit teken komt overeen met elk afzonderlijk teken behalve een nieuwe regel. Het is een handig hulpmiddel voor het matchen van patronen met onbekende karakters.
- De Kleene-ster (*): Dit teken komt overeen met nul of meer exemplaren van het voorgaande teken of de voorgaande groep. Hiermee kan het voorgaande teken of de voorgaande groep een willekeurig aantal keren in de tekenreeks voorkomen, inclusief nul.
- Het optionele teken (?): Dit teken komt overeen met nul of één voorkomen van een voorafgaand teken of groep.
- Begin van lijnanker (^): Dit teken komt alleen overeen met het begin van een regel of string.
- Einde van lijnanker ($): Dit teken komt overeen met het einde van een regel of tekenreeks.
- Tekenset/klasse ([]): Een tekenset komt overeen met elk teken uit een reeks tekens in een tekenreeks. U definieert ze met behulp van vierkante haken [] en u kunt een set vaste tekens, speciale tekens of bepaalde groepen tekens opgeven.
- Alternatief karakter (|): Dit teken komt overeen met het vorige of volgende teken of groep. Het werkt op dezelfde manier als de OK JavaScript-operator.
- Karakter groeperen (()): Met het groeperingsteken kunt u tekens of subuitdrukkingen groeperen, er operators op toepassen als een eenheid en de volgorde van bewerkingen bepalen.
Een tekenreeks testen tegen een reguliere expressie in JavaScript
In JavaScript kunt u op verschillende manieren een tekenreeks testen tegen een reguliere expressie.
In dit gedeelte wordt ervan uitgegaan dat u basiskennis heeft van reguliere expressies en patronen. Als u zich niet op uw gemak voelt met reguliere expressies, kijk dan eens een beginnershandleiding voor reguliere expressies Eerst.
De testmethode
De .test() methode retourneert een Booleaanse waarde die aangeeft of de reguliere expressie al dan niet overeenkomt met de tekenreeks. Deze methode gebruikt een string om de zoekopdracht als argument uit te voeren. Het is vooral handig voor eenvoudige controles.
Bijvoorbeeld:
laten reguliere expressie = /.com$/;
laten str = "voorbeeld.com";
troosten.log (regex.test (str)); // WAAR
Deze reguliere expressie komt overeen met een tekenreeks die eindigt op ".com".
De exec-methode
De .exec() methode retourneert een array met de overeenkomende tekst en vastgelegde groepen of nul als het geen overeenkomst vindt. Deze methode gebruikt een string om de zoekopdracht als argument uit te voeren. Het is handig voor complexere reguliere expressies.
Bijvoorbeeld:
laten reguliere expressie = /^\\(?([0-9]{3})\\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/;
laten str = "123-456-7890";
laten resultaat = regex.exec (str);
als (resultaat !== nul) {
troosten.log(`${resultaat[0]} is een geldig telefoonnummer`);
} anders {
troosten.log("Ongeldig telefoonnummer");
}
De bovenstaande reguliere expressie komt overeen met een tekenreeks die begint met een optionele "(", drie cijfers en een optionele ")". Het zoekt dan naar een optionele "-", ".", of spatie, gevolgd door drie cijfers. Het zoekt eindelijk naar een optionele "-", ".", of spatie gevolgd door vier cijfers aan het eind van de string.
Deze reguliere expressie komt overeen met telefoonnummers in de notatie "(xxx) xxx-xxxx", "xxx-xxx-xxxx", "xxx.xxx.xxxx" of "xxx xxx xxxx".
Als het een match vindt, .exec() retourneert een array met de overeenkomende tekst en eventuele vastgelegde groepen (gedefinieerd door haakjes). Het zal elke groep opnemen als een extra element in de array die het retourneert. Hierdoor hebt u toegang tot specifieke delen van de overeenkomende tekst, wat u kan helpen bij het extraheren van informatie uit een tekenreeks.
De vervangingsmethode
De .vervangen() methode zoekt naar een overeenkomst tussen een reguliere uitdrukking en een tekenreeks en vervangt de overeenkomende tekst door een gespecificeerde vervangende tekst. Dit is een methode van tekenreeksobjecten en er zijn een reguliere expressie en een vervangende tekenreeks voor nodig als argumenten.
Bijvoorbeeld:
laten tekenreeks = "De snelle bruine vos springt over de luie hond heen.";
laten uitdrukking = /The/gi;
laten newString = string.replace (expressie, "A");
troosten.log (nieuweString); // "een snelle bruine vos springt over een luie hond heen."
Dit voorbeeld noemt de vervangen() methode op de snaar variabele, waarbij de reguliere expressie wordt doorgegeven, uitdrukking. De reguliere expressie komt overeen met alle voorkomens van "The" in de tekenreeks, ongeacht het hoofdlettergebruik. De aanroep van de methode replace instrueert deze om elk voorkomen te vervangen door de tekenreeks "a".
Prestatieoverwegingen bij het gebruik van reguliere expressies
Hoewel reguliere expressies helpen bij het matchen en manipuleren van tekenreeksen, kunnen ze ook kostbaar zijn in termen van prestaties. Patronen zo specifiek mogelijk maken en eenvoudig houden is essentieel om ze performant te houden.