Direct naar de hoofdinhoud
Module 6 · Les 3 van 423/32 in de cursus~12 min
Modulelessen (3/4)

Kijk achter: `(?<=...)` `(?<!...)`

Lookbehinds zijn het spiegelbeeld van lookaheads: ze kijken voor de huidige positie, nog steeds met een breedte van nul.

  • (?<=...) -- positieve lookbehind: het patroon moet voorafgaan.
  • (?<!...) -- negatieve lookbehind: het patroon mag NIET voorafgaan.
Code
Pattern: (?<=\$)\d+
Sample:  Costo $100, sconto -25, totale $75.
                ^^^                  ^^

De $ zit niet in de match, maar werkt als voorwaarde: alleen cijfers voorafgegaan door de match met het dollarteken.

Negatieve blik achterom

Code
Pattern: (?<!\w)\d+
Sample:  Codice abc123 e numero 456.
                              ^^^

(?<!\w) vereist dat er vóór de cijfers GEEN woordteken staat: abc123 is uitgesloten (vóór 123 is er c, een \w), 456 komt overeen (vóór er is een spatie).

Belangrijk verschil versus niet-vangende groep

Code
\\$\\d+         matches "$100": the match includes the dollar sign.
(?<=\\$)\\d+    matches "100":  the match contains ONLY the digits.

Als u de "schone" waarde zonder het voorvoegsel wilt extraheren, lookbehind is de juiste keuze.

Lookbehind-compatibiliteit in JavaScript

Positieve (?<=...) en negatieve (?<!...) lookbehind controleren wat er voorafgaat aan de huidige positie. In JavaScript worden ze ondersteund vanaf ES2018; in oudere browsers of oudere Node.js-engines zouden ze syntaxiscompilatiefouten veroorzaken.

Probeer het

Oefening#regex.m6.l3.e1
Pogingen: 0Laden…

Haal alleen het numerieke bedrag (zonder het $-teken) uit de prijzen in de tekst.

Editor laden…
Toon hint

Verplaats \\$ binnen een positieve lookbehind (?<=\\$): een positievoorwaarde, geen onderdeel van de wedstrijd.

Oplossing beschikbaar na 3 pogingen

Oefening beoordelen

Oefening#regex.m6.l3.e2
Pogingen: 0Laden…

Vind elke reeks cijfers die NIET wordt voorafgegaan door een letter of cijfer (d.w.z. 'geïsoleerde' cijfers, geen delen van code zoals `abc123`).

Editor laden…
Toon hint

Gebruik een negatieve lookbehind (?<!\\w) om uit te sluiten dat er een letter of cijfer voor staat.

Oplossing beschikbaar na 3 pogingen

Extra uitdaging

Oefening#regex.m6.l3.e3
Pogingen: 0Laden…

Find only the digits of negative numbers (digits preceded by the `-` sign), excluding the minus sign from the match.

Editor laden…
Toon hint

Verplaats het minteken - binnen een positieve lookbehind (?<=-).

Oplossing beschikbaar na 3 pogingen