⊗jsSpREESCh 99 of 294 menu

Escapen van speciale tekens in JavaScript reguliere expressies

Stel dat we willen dat een speciaal teken zichzelf vertegenwoordigt. Hiervoor moet het geëscaped worden met een backslash. Laten we eens kijken naar voorbeelden.

Voorbeeld

In het volgende voorbeeld wilde de auteur van de reguliere expressie dat het zoekpatroon er als volgt uitzag: letter 'a', dan plus '+', dan letter 'x'. De auteur van de code heeft het teken '+' echter niet geëscaped en daarom ziet het zoekpatroon er in werkelijkheid zo uit: letter 'a' een of meer keer, dan letter 'x':

let str = 'a+x ax aax aaax'; let res = str.replace(/a+x/g, '!');

Als resultaat wordt het volgende in de variabele geschreven:

'a+x ! ! !'

Voorbeeld

En nu heeft de auteur de plus geëscaped met een backslash. Nu ziet het zoekpatroon eruit zoals het hoort: letter 'a', dan plus '+', dan letter 'x'.

let str = 'a+x ax aax aaax'; let res = str.replace(/a\+x/g, '!');

Als resultaat wordt het volgende in de variabele geschreven:

'! ax aax aaax'

Voorbeeld

In dit voorbeeld ziet het patroon er als volgt uit: letter 'a', dan punt '.', dan letter 'x':

let str = 'a.x abx azx'; let res = str.replace(/a\.x/g, '!');

Als resultaat wordt het volgende in de variabele geschreven:

'! abx azx'

Voorbeeld

In het volgende voorbeeld vergat de auteur de punt te escapen en alle substrings werden gevonden door de reguliere expressie, omdat een niet-geëscapte punt elk teken vertegenwoordigt:

let str = 'a.x abx azx'; let res = str.replace(/a.x/g, '!');

Als resultaat wordt het volgende in de variabele geschreven:

'! ! !'

Opmerking

Let op het feit dat als je de backslash voor de punt vergeet (wanneer deze zichzelf zou moeten vertegenwoordigen) - dit kan zelfs onopgemerkt blijven:

'a.x'.replace(/a.x/g, '!'); // retourneert '!', zoals we wilden

Visueel werkt het correct (omdat de punt elk teken vertegenwoordigt, inclusief een gewone punt '.'). Maar als we de string veranderen waarin de vervangingen plaatsvinden - zien we onze fout:

'a.x abx azx'.replace(/a.x/g, '!'); // retourneert '! ! !', maar werd '! abx azx' verwacht

Lijst van speciale tekens en gewone tekens

Als je een gewoon teken escapest - er gebeurt niets ergs - het zal nog steeds zichzelf vertegenwoordigen. Uitzondering - cijfers, deze kunnen niet geëscaped worden.

Vaak bestaat er twijfel of een bepaald teken speciaal is. Sommigen gaan zo ver dat ze alle verdachte tekens achter elkaar escapen. Dit is echter een slechte praktijk (vervuilt de reguliere expressie met backslashes).

Speciale tekens zijn: $ ^ . * + ? \ / {} [] () |

Geen speciale tekens zijn: @ : , ' " ; - _ = < > % # ~ `& !

Praktische opdrachten

Gegeven een string:

let str = 'a.a aba aea';

Schrijf een reguliere expressie die de string 'a.a' vindt, zonder de anderen te vangen.

Gegeven een string:

let str = '2+3 223 2223';

Schrijf een reguliere expressie die de string '2+3' vindt, zonder de anderen te vangen.

Gegeven een string:

let str = '23 2+3 2++3 2+++3 345 567';

Schrijf een reguliere expressie die de strings '2+3', '2++3', '2+++3' vindt, zonder de anderen te vangen (+ kan elk aantal zijn).

Gegeven een string:

let str = '23 2+3 2++3 2+++3 445 677';

Schrijf een reguliere expressie die de strings '23', '2+3', '2++3', '2+++3' vindt, zonder de anderen te vangen.

Gegeven een string:

let str = '*+ *q+ *qq+ *qqq+ *qqq qqq+';

Schrijf een reguliere expressie die de strings '*q+', '*qq+', '*qqq+' vindt, zonder de anderen te vangen.

Gegeven een string:

let str = '[abc] {abc} abc (abc) [abc]';

Schrijf een reguliere expressie die de strings in vierkante haakjes vindt en ze vervangt door '!'.

Nederlands
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wij gebruiken cookies voor de werking van de site, analyse en personalisatie. De verwerking van gegevens gebeurt volgens het Privacybeleid.
alles accepteren aanpassen weigeren