Meta tags:
description= Katastrophales Backtracking in JavaScript-Regulärausdrücken: Ursachen, gefährliche Muster wie (a+)+ und Techniken zur Umstrukturierung für bessere Performance.;
Headings (most frequently used words):
muster, backtracking, katastrophales, katastrophalem, und, eine, beispiel, problematisches, was, verursacht, erkennen, die, zu, neigen, strategien, zur, vermeidung, von, praktische, beispiele, lösungen, fazit, übungen, den, verschachtelten, quantor, eliminieren, atomare, gruppe, mit, lookahead, emulieren, spezifische, nicht, überlappende, zeichenklassen, verwenden, das, verankern, begrenzen, abgleich, verschachtelter, html, tags, validierung, einer, bezeichnerliste, verbessertes, sichere, alternation,
Text of the page (most frequently used words):
und (71), die (47), das (42), backtracking (29), javascript (26), sie (23), const (23), der (19), api (19), dom (19), #muster (18), nicht (18), console (18), ist (17), eine (17), ein (17), log (17), engine (17), lernen (16), regex (16), wenn (14), test (14), mit (13), html (12), katastrophales (12), quantoren (12), zeichen (12), kann (11), str (11), für (10), was (10), abgleichen (10), run (10), editable (10), oder (9), gruppe (9), abgleich (9), string (9), web (8), des (8), wie (8), einer (8), the (8), auf (8), methoden (8), alle (7), von (7), start (7), strings (7), den (7), können (7), tools (6), greedy (6), gruppen (6), sind (6), einen (6), true (6), false (6), sodass (6), eingabe (6), safe (6), quantor (6), dem (6), date (6), now (6), w3docs (5), übungen (5), zur (5), katastrophalem (5), position (5), lookahead (5), sich (5), lazy (5), eingaben (5), wird (5), eines (5), muss (5), nur (5), jede (5), verwenden (5), instantly (5), bei (5), events (5), formatter (5), color (5), json (4), generator (4), css (4), this (4), flag (4), zeichenklassen (4), verschachtelter (4), mehrdeutigkeit (4), teile (4), musters (4), dieselben (4), lange (4), span (4), and (4), aufzuteilen (4), ende (4), event (4), shadow (4), fetch (4), async (4), einführung (4), über (3), code (3), encoder (3), editor (3), quizze (3), php (3), beispiele (3), page (3), suche (3), verwendung (3), end (3), anker (3), überlappende (3), häufige (3), ursachen (3), regulären (3), ausdrücken (3), regulärausdruck (3), hinzufügen (3), exponentiell (3), werden (3), durch (3), performance (3), verankern (3), hat (3), hier (3), alternation (3), match (3), äußere (3), wiederholen (3), beispiel (3), gleicht (3), gibt (3), schnell (3), jeder (3), wiederholung (3), good (3), atomic (3), took (3), anderen (3), einem (3), genau (3), weil (3), innerhalb (3), erlaubt (3), als (3), zwischen (3), viele (3), arten (3), aus (3), verschiedene (3), dieser (3), anfang (3), dass (3), techniken (3), document (3), data (3), browser (3), objekte (3), eigenschaften (3), promise (3), funktionen (3), function (3), objekt (3), operatoren (3), italiano (2), português (2), español (2), français (2), русский (2), deutsch (2), english (2), beautifier (2), diff (2), password (2), python (2), java (2), git (2), bücher (2), snippets (2), fazit (2), praktische (2), lösungen (2), strategien (2), vermeidung (2), erkennen (2), neigen (2), verursacht (2), sticky (2), lookbehind (2), prüfen (2), erfassungsgruppen (2), schreiben (2), langen (2), weiteren (2), zeit (2), problem (2), besteht (2), fast (2), immer (2), beseitigen (2), verschachtelte (2), benachbarte (2), lassen (2), wiederholungen (2), begrenzen (2), atomare (2), emulieren (2), hilft (2), quantifizierte (2), nie (2), text (2), benötigen (2), verhalten (2), nested (2), quantifiers (2), classes (2), dangerous (2), slow (2), bad (2), name (2), innere (2), exponentielles (2), auslöst (2), problematisches (2), ambiguity (2), dokument (2), klasse (2), bis (2), zum (2), keine (2), div (2), catastrophic (2), tags (2), scheitern (2), erneut (2), versuchen (2), dot (2), möglichkeit (2), beide (2), denselben (2), aaaaaaaaaaaaaaaaaaaaaaaaaaaa (2), returned (2), varianten (2), dasselbe (2), verbraucht (2), aufteilen (2), mehr (2), abzugleichen (2), verschachtelten (2), weise (2), aufteilung (2), entsteht (2), neu (2), zwei (2), letztendlich (2), scheitert (2), gezielt (2), angreifer (2), aaaaaaaaaaaa (2), diese (2), ungefähr (2), ausprobieren (2), beginnt (2), erster (2), bestätigt (2), mehrere (2), dauert (2), warum (2), time (2), zeigt (2), bevor (2), service (2), loop (2), workers (2), file (2), flags (2), components (2), animationen (2), url (2), microtasks (2), formulare (2), benutzerdefinierte (2), ereignisse (2), styles (2), klassen (2), arrays (2), generatoren (2), advanced (2), await (2), fehlerbehandlung (2), promises (2), chaining (2), error (2), erweitern (2), handling (2), class (2), prototypes (2), interaktive (2), elemente (2), property (2), object (2), arrow (2), new (2), syntax (2), variablen (2), functions (2), objects (2), hash (2), 2026, rechte, vorbehalten, entwickler, gemacht, sprache, datenschutzrichtlinie, kontakt, uns, unternehmen, probier, üben, kostenlose, tutorials, seit, 2014, next, previous, yes, helpful, mehrdeutige, teilmuster, atomarer, übung, vertiefung, empfehlen, verwandten, kapitel, gegen, vertrauenswürdige, ausgeführt, testen, ihn, hundert, gefolgt, beobachten, timing, werte, zeichens, merklich, verlängert, umstrukturiert, fehlschlagenden, anwendung, einfrieren, ausgelöst, echtes, sicherheitsrisiko, lösung, darin, abflachen, disjunkte, zeichenmengen, wechsel, ababcde, abcdab, gefährlich, ordnung, disjunkt, zweimal, überlegen, aufgeteilt, erfassten, etwas, schneller, klarer, auch, ändert, erfassende, sichere, over, overlapping, flatten, single, quantifier, one, way, user_name_42, dieselbe, falle, übereinstimmende, validierung, bezeichnerliste, cannot, removing, that, creates, hello, risky, ersetzen, gesamte, verschlucken, dann, zurückkriechen, schließende, spitze, klammer, überschreiten, alles, nächsten, überlappung, zurückgetracked, könnte, verbessertes, potential, for, häufiger, anwendungsfall, regulärausdrücke, falscher, handhabung, leicht, führen, reguläre, ausdrücke, generell, ungeeignet, parsen, beliebiger, tief, strukturen, komplexe, dokumente, geeigneten, parser, hinweis, bounded, repetition, caps, search, space, user, example, com, not, email, ermöglicht, anstatt, festlegen, expliziten, obergrenze, statt, begrenzt, viel, arbeit, einzelne, erzeugen, ambiguous, both, can, specific, digits, have, distinct, roles, 1234567, explodiert, jeden, teil, eigene, menge, bevorzugen, beispielsweise, gegenüber, punkt, konkurrieren, spezifische, group, emulation, instead, eingebauten, manche, einmal, zurückgeben, rückreferenz, nachbilden, erfasst, diesen, aber, erfasste, lookaheads, war, beim, besitzergreifende, atomaren, same, language, nesting, äquivalent, einzelnen, einfach, kombinatorische, explosion, zurückfallen, eliminieren, ziel, korrektur, unten, wechseln, erkunden, weiterhin, tut, reihenfolge, müssen, ändern, seine, gierigkeit, struktur, quantifizierten, jeweils, teilstring, erkundet, gesamten, startposition, verankerte, gieriges, elementen, schließt, bereits, überlappenden, mentale, checkliste, gefährdet, drei, folgenden, merkmale, aufweist, warnsignale, überlappen, erkenntnis, schlägt, abgeglichen, gesamtabgleich, konstruierte, fehlschlagende, sendet, succeeds, immediately, never, needs, backtrack, abschließende, lässt, deshalb, einzigen, laufzeit, typische, merkmal, exponentiellen, wachstums, folgende, gelingt, kein, fehlschlagendes, vorhanden, vollständige, untersuchung, erzwingt, verdoppelt, prozess, wachsen, mögliche, ausprobiert, potenziell, könnten, wachstum, geht, zurück, verteilt, abgeglichenen, wiederholt, inneren, äußeren, bewertet, andere, partition, versuch, ausrufezeichen, erreicht, wodurch, fehlschlägt, diesem, zeitpunkt, äußerer, erste, aaa, gruppenabgleich, abgleichprozess, läuft, nun, folgt, vorherigen, male, abgleicht, dies, ihrem, computer, weiteres, analysieren, wir, will, cause, 1000, seconds, tritt, typischerweise, selbst, quantifiziert, gefahr, möglichkeiten, aufteilungen, feststellen, nichts, übereinstimmt, klassische, einziger, langsamer, benutzerseitige, angewendet, realer, denial, angriffsvektor, oft, redos, bezeichnet, lediglich, kurzen, konstruierten, senden, maximiert, ihren, node, einzufrieren, wichtig, seite, erklärt, man, gefährliches, erkennt, konkrete, umzuschreiben, bleibt, vorausgesetzt, unterschied, vertraut, matching, phänomen, übermäßig, benötigt, bestimmte, auszuwerten, erheblichen, leistungseinbußen, führt, manchmal, sekunden, minuten, praktisch, ewig, versucht, aufgibt, anzahl, untersuchten, kombinationen, wächst, eingabelänge, sehr, regulärausdrücken, gefährliche, umstrukturierung, bessere, intl, vibration, notifications, audio, webrtc, geolocation, websockets, midi, storage, validation, fullscreen, history, screen, orientation, push, webgl, battery, animations, apis, regexp, rückwärtsreferenzen, gierige, faule, sets, ranges, escaping, sonderzeichen, wortgrenze, mehrzeiliger, modus, unicode, regular, expressions, styling, slots, komposition, template, element, custom, elements, animation, indexeddb, localstorage, sessionstorage, cookies, cookie, storing, wiederaufnehmbarer, dateiupload, server, sent, xmlhttprequest, ursprungsübergreifende, anfragen, abbruch, download, fortschritt, formdata, network, requests, canvas, references, macrotasks, selection, range, resizeobserver, intersectionobserver, mutation, observer, various, ressourcen, laden, onload, onerror, scripts, defer, domcontentloaded, load, beforeunload, unload, resource, loading, ereignis, methode, submit, clipboard, change, input, cut, copy, paste, fokussierung, focus, blur, formulareigenschaften, forms, controls, scrolling, tastatur, keydown, keyup, drag, drop, mausbewegungen, mausereignisse, grundlagen, auslösen, standard, browseraktionen, delegation, bubbling, capturing, introduction, koordinaten, fenstergrößen, scrollen, verändern, attribute, knoteneigenschaften, typ, tag, inhalt, getelement, queryselector, browserumgebung, spezifikationen, streams, filereader, blob, textdecoder, textencoder, arraybuffer, binäre, binary, files, fensterübergreifende, kommunikation, popups, window, frames, windows, polyfills, transpiler, bigint, currying, eval, proxy, reflect, miscellaneous, dynamische, imports, export, import, module, modules, iteratoren, generators, iteration, promisification, callbacks, fehler, try, catch, mixins, checking, instanceof, eingebaute, private, geschützte, statische, klassenvererbung, grundsyntax, prototyp, ohne, __proto__, native, prototypale, vererbung, inheritance, widgets, optimierung, debugging, barrierefreiheit, kompatibilität, manipulationsbibliotheken, fortgeschrittene, manipulationstechniken, traversieren, arbeiten, manipulieren, auswählen, knoten, getter, setter, deskriptoren, properties, configuration, closures, vertieft, binding, debounce, throttle, dekoratoren, weiterleitung, call, apply, settimeout, setinterval, nfe, globales, alte, var, scope, rest, parameter, spread, rekursion, stack, tojson, datum, uhrzeit, destructuring, assignment, keys, values, entries, weakmap, weakset, map, set, iterables, array, math, zahlen, primitiven, types, optional, konstruktor, operator, primitiv, konvertierung, symbol, typen, garbage, collection, objektmethoden, kopieren, basics, es6, funktionsausdrücke, schleifen, switch, bedingte, nullish, coalescing, logische, vergleichsoperatoren, typkonvertierungen, datentypen, use, strict, kommentare, basic, anmelden, durchsuchen, formatters, reverse, sha256, md5, length, calculator, colors, hsl, hex, mixer, converter, picker, general, kurse,
Text of the page (random words):
ppets tools general tools html editor password generator html encoder code diff json beautifier alle 13 color tools color picker color converter color mixer color hex colors hsl alle 10 string tools string length calculator md5 hash generator sha256 hash generator string reverse url encoder alle 19 code formatters javascript formatter css formatter html formatter json formatter php formatter w3docs durchsuchen k de english en deutsch de русский ru français fr español es português pt italiano it anmelden javascript lernen javascript basic einführung javascript verwenden js kommentare js mit dom js use strict js variablen js datentypen js typkonvertierungen js interaktive funktionen js operatoren js vergleichsoperatoren js logische operatoren js nullish coalescing js bedingte operatoren js switch js schleifen js funktionen js funktionsausdrücke js arrow functions js es6 objects the basics js objects js objekte kopieren js objektmethoden this js garbage collection js symbol typen js objekt zu primitiv konvertierung js konstruktor operator new js optional chaining data types js methoden von primitiven js zahlen js math js strings js arrays js array methoden js iterables js map und set js weakmap und weakset js object keys values entries js destructuring assignment js datum und uhrzeit js json methoden tojson advanced functions js rekursion und stack js rest parameter und spread syntax js variablen scope js das alte var js globales objekt js function objekt nfe js die new function syntax js settimeout und setinterval js dekoratoren und weiterleitung call apply js debounce throttle js function binding js arrow funktionen vertieft js closures object properties configuration js property flags und deskriptoren js property getter und setter javascript html dom dom einführung die dom knoten dom elemente auswählen den dom manipulieren arbeiten mit styles im dom event handling im dom dom traversieren dom manipulationstechniken formulare im dom verwenden fortgeschrittene dom techniken dom manipulationsbibliotheken dom browser kompatibilität dom barrierefreiheit debugging und tools performance optimierung interaktive elemente und widgets prototypes inheritance js prototypale vererbung js native prototypes js prototyp methoden objekte ohne __proto__ classes js class grundsyntax js klassenvererbung statische eigenschaften und methoden private und geschützte eigenschaften in js js eingebaute klassen erweitern js class checking instanceof js mixins error handling js fehlerbehandlung try catch js benutzerdefinierte fehler error erweitern promises async await js einführung callbacks js promise js promise chaining js fehlerbehandlung mit promises promise api promisification microtasks async await generators advanced iteration generatoren async iteratoren und generatoren modules module export und import dynamische imports miscellaneous proxy und reflect eval currying bigint js polyfills transpiler frames and windows popups und window methoden fensterübergreifende kommunikation binary data files arraybuffer binäre arrays textdecoder und textencoder blob file und filereader js streams api document browserumgebung spezifikationen suche getelement queryselector knoteneigenschaften typ tag und inhalt attribute und eigenschaften das dokument verändern styles und klassen fenstergrößen und scrollen koordinaten introduction to events javascript einführung in browser ereignisse bubbling und capturing event delegation standard browseraktionen benutzerdefinierte ereignisse auslösen ui events mausereignisse grundlagen mausbewegungen drag and drop tastatur keydown und keyup scrolling forms controls formulareigenschaften und methoden fokussierung focus blur events change input cut copy paste js clipboard api formulare ereignis und methode submit document and resource loading page domcontentloaded load beforeunload unload scripts async defer ressourcen laden onload und onerror various mutation observer js intersectionobserver js resizeobserver selection und range event loop microtasks und macrotasks javascript references canvas network requests fetch api formdata fetch download fortschritt fetch abbruch fetch ursprungsübergreifende anfragen url objekte xmlhttprequest js server sent events wiederaufnehmbarer dateiupload storing data in the browser cookies document cookie localstorage sessionstorage indexeddb animation css animationen javascript animationen web components web components custom elements shadow dom template element shadow dom slots komposition shadow dom styling shadow dom und events regular expressions js regex muster und flags zeichenklassen unicode flag u und klasse p anker string anfang und ende mehrzeiliger modus der anker flag m wortgrenze b escaping sonderzeichen sets und ranges quantoren und n gierige und faule quantoren erfassungsgruppen rückwärtsreferenzen im muster n und k name javascript alternation or lookahead und lookbehind katastrophales backtracking sticky flag y suche an position methoden von regexp und string javascript apis web animations api file api battery api webgl push api screen orientation api history api console api fullscreen api validation api web storage api web midi api js web workers service workers websockets geolocation webrtc web audio api notifications api die vibration api js intl api katastrophales backtracking katastrophales backtracking in javascript regulärausdrücken ursachen gefährliche muster wie a und techniken zur umstrukturierung für bessere performance katastrophales backtracking ist ein phänomen bei regulären ausdrücken bei dem die engine eine übermäßig lange zeit benötigt um bestimmte muster auszuwerten was zu erheblichen leistungseinbußen führt manchmal sekunden minuten oder praktisch ewig es entsteht weil die engine versucht teile des strings auf sehr viele verschiedene arten abzugleichen bevor sie aufgibt und die anzahl der untersuchten kombinationen wächst exponentiell mit der eingabelänge diese seite erklärt was das problem auslöst wie man ein gefährliches muster erkennt und zeigt konkrete techniken um einen regulärausdruck so umzuschreiben dass er schnell bleibt es wird vorausgesetzt dass sie mit quantoren und dem unterschied zwischen greedy und lazy matching vertraut sind warum das wichtig ist ein einziger langsamer regulärausdruck der auf benutzerseitige eingaben angewendet wird ist ein realer denial of service angriffsvektor oft als redos bezeichnet ein angreifer muss lediglich einen kurzen gezielt konstruierten string senden der das backtracking maximiert um ihren node js event loop einzufrieren was verursacht katastrophales backtracking katastrophales backtracking tritt typischerweise bei verschachtelten quantoren auf einem quantor innerhalb einer gruppe die selbst quantifiziert ist wie z b a die gefahr zeigt sich wenn zwei teile des musters dieselben zeichen abgleichen können sodass die engine viele überlappende möglichkeiten hat die eingabe aufzuteilen wenn der abgleich letztendlich scheitert muss die engine jede dieser aufteilungen ausprobieren bevor sie feststellen kann dass nichts übereinstimmt hier ist das klassische beispiel javascript editable run const regex a const start date now const str aaaaaaaaaaaa console log regex test str this will cause catastrophic backtracking const end date now const time end start 1000 console log it took time seconds wenn dies auf ihrem computer nicht lange dauert können sie der str ein weiteres a zeichen hinzufügen warum dauert das so lange analysieren wir das das muster a besteht aus das die position am anfang des strings bestätigt a das ein oder mehrere a zeichen abgleicht das der vorherigen gruppe a erlaubt sich ein oder mehrere male zu wiederholen das die position am ende des strings bestätigt der abgleichprozess läuft nun wie folgt ab erster abgleich die engine beginnt am anfang des strings erster gruppenabgleich die engine gleicht das erste a ab und verbraucht alle a zeichen aaa äußerer quantor das äußere erlaubt der engine die gruppe a zu wiederholen wenn die engine das ausrufezeichen erreicht kann sie es nicht mit dem muster abgleichen wodurch der abgleich fehlschlägt zu diesem zeitpunkt beginnt das backtracking backtracking versuch die engine geht zurück und verteilt die abgeglichenen a zeichen wiederholt zwischen dem inneren a und dem äußeren quantor sie bewertet jede aufteilung neu um zu prüfen ob eine andere partition das muster bis zum ende des strings abgleichen kann exponentielles wachstum dieser backtracking prozess kann exponentiell wachsen da die engine jede mögliche weise ausprobiert den string aus a zeichen in verschiedene gruppen aufzuteilen die a potenziell abgleichen könnten für einen string aus n a zeichen können das innere a und das äußere diese zeichen auf ungefähr 2 n 1 verschiedene arten in gruppen aufteilen wenn das abschließende den abgleich scheitern lässt muss die engine alle dieser varianten ausprobieren deshalb verdoppelt das hinzufügen eines einzigen weiteren a zur eingabe die laufzeit ungefähr das typische merkmal eines exponentiellen wachstums der folgende abgleich gelingt schnell weil kein fehlschlagendes ende vorhanden ist das eine vollständige untersuchung erzwingt javascript editable run succeeds immediately the engine never needs to backtrack const regex a console log regex test aaaaaaaaaaaa true instantly die erkenntnis katastrophales backtracking schlägt nur zu wenn ein muster auf viele arten abgeglichen werden kann und der gesamtabgleich letztendlich scheitert gezielt konstruierte fehlschlagende eingaben sind genau das was ein angreifer sendet muster erkennen die zu katastrophalem backtracking neigen als mentale checkliste ist ein muster gefährdet wenn es alle drei folgenden merkmale aufweist eine wiederholung innerhalb einer anderen wiederholung über zeichen die sich überlappen häufige warnsignale verschachtelte quantoren z b a d w quantifizierte gruppen mit einer überlappenden alternation z b a a oder w d w schließt bereits d ein ein gieriges oder zwischen zwei elementen die dieselben zeichen abgleichen können z b nicht verankerte muster auf langen eingaben die den gesamten abgleich an jeder startposition neu versuchen wenn die wiederholungen einer quantifizierten gruppe jeweils denselben teilstring abgleichen können entsteht mehrdeutigkeit und mehrdeutigkeit ist das was backtracking erkundet strategien zur vermeidung von katastrophalem backtracking das ziel jeder korrektur unten ist dasselbe die mehrdeutigkeit beseitigen die es der engine erlaubt die eingabe auf mehr als eine weise aufzuteilen das wechseln von greedy zu lazy hilft hier nicht beide erkunden weiterhin jede aufteilung lazy tut es nur in einer anderen reihenfolge sie müssen die struktur des musters ändern nicht seine gierigkeit 1 den verschachtelten quantor eliminieren a ist fast immer äquivalent zu einem einzelnen quantor wenn sie nur ein oder mehr a benötigen schreiben sie einfach a es gibt genau eine möglichkeit das abzugleichen sodass die engine nicht in eine kombinatorische explosion zurückfallen kann javascript editable run dangerous nested quantifiers const slow a safe the same language no nesting no ambiguity const safe a const str aaaaaaaaaaaaaaaaaaaaaaaaaaaa const start date now console log safe test str false returned instantly console log took date now start ms 2 eine atomare gruppe mit lookahead emulieren javascript hat keine eingebauten atomaren gruppen oder besitzergreifende quantoren a wie manche anderen regex varianten sie können dasselbe einmal abgleichen und nie zurückgeben verhalten mit einem lookahead und einer rückreferenz nachbilden a 1 der lookahead gleicht a greedy ab erfasst es und 1 verbraucht genau diesen text aber weil die erfasste gruppe innerhalb eines lookaheads war wird die engine sie beim backtracking nicht erneut aufteilen javascript editable run atomic group emulation a 1 instead of a const atomic a 1 const str aaaaaaaaaaaaaaaaaaaaaaaaaaaa const start date now console log atomic test str false returned instantly console log took date now start ms 3 spezifische nicht überlappende zeichenklassen verwenden backtracking explodiert wenn benachbarte teile eines musters dieselben zeichen abgleichen können lassen sie jeden teil eine eigene menge abgleichen sodass es nur eine möglichkeit gibt die eingabe aufzuteilen bevorzugen sie beispielsweise d d gegenüber d d bei dem beide d gruppen um denselben punkt konkurrieren javascript editable run ambiguous both d can match the dot const bad d d specific digits and the dot have distinct roles const good d d console log good test 3 14 true console log good test 1234567 false instantly 4 das muster verankern und begrenzen das verankern mit und ermöglicht es der engine schnell zu scheitern anstatt den abgleich an jeder position im string erneut zu versuchen das festlegen einer expliziten obergrenze für einen quantor a 1 20 statt a begrenzt wie viel arbeit eine einzelne wiederholung erzeugen kann javascript editable run bounded repetition caps the search space const regex a z 1 32 a z 1 32 a z 2 6 console log regex test user example com true console log regex test not an email false praktische beispiele und lösungen beispiel 1 abgleich verschachtelter html tags ein häufiger anwendungsfall für regulärausdrücke ist der abgleich verschachtelter html tags was bei falscher handhabung leicht zu katastrophalem backtracking führen kann hinweis reguläre ausdrücke sind generell ungeeignet für das parsen beliebiger oder tief verschachtelter html strukturen verwenden sie für komplexe dokumente einen geeigneten html parser problematisches muster javascript editable run const regex w 1 const str div span span div console log regex test str potential for catastrophic backtracking verbessertes muster ersetzen sie das greedy das das gesamte dokument verschlucken und dann zurückkriechen kann durch eine klasse die die schließende spitze klammer nicht überschreiten kann gleicht alles bis zum nächsten ab sodass es keine überlappung gibt durch die zurückgetracked werden könnte javascript editable run cannot match removing the ambiguity that creates const regex w 1 const str span hello span console log regex test str true no risky backtracking beispiel 2 validierung einer bezeichnerliste problematisches muster a za z0 9_ ist dieselbe falle wie a das innere und das äußere wiederholen sich über dieselben zeichen sodass eine lange nicht übereinstimmende eingabe exponentielles backtracking auslöst javascript editable run nested quantifiers over overlapping classes dangerous const slow a za z0 9_ flatten to a single quantifier one way to match const safe a za z0 9_ console log safe test user_name_42 true console log safe test bad name false instantly eine sichere alternation nicht jede quantifizierte gruppe ist gefährlich ab cd e ist in ordnung ab und cd sind disjunkt sodass die engine nie zweimal überlegen muss wie sie die eingabe aufgeteilt hat verwenden sie eine nicht erfassende gruppe wenn sie den erfassten text nicht benötigen sie ist etwas schneller und klarer auch wenn sie das bac...
|