Beyond Basic Filters: RegEx Filter

In modernen Anwendungen ist das effektive Filtern von Daten entscheidend für die Benutzererfahrung. Dieser Artikel beschreibt unsere Reise bei der Implementierung von regulären Ausdrücken (RegEx) in unser Filtersystem und diskutiert die Abwägungen, Herausforderungen und Erkenntnisse, die wir dabei gewonnen haben. Dies ist der dritte Artikel in unserer Serie "Beyond Basic Filters".

In vielen unserer Projekte stellen wir große Datenmengen in Grid-Komponenten dar. Im Rahmen eines dieser Projekte haben wir nach Möglichkeiten gesucht, die bestehenden Gruppierungs- und Filterfunktionen zu verbessern, um den Benutzern die Suche nach den benötigten Daten effizienter zu gestalten. Eine userer Ideen war die Einführung eines Wildcard-Mechanismus für unsere Filter.

Eine unserer ersten Entscheidungen war, ob wir ausschließlich reguläre Ausdrücke unterstützen oder stattdessen einen eigenen benutzerdefinierten Wildcard-Mechanismus entwickeln sollten. Ersteres wäre einfacher zu implementieren, könnte jedoch für einige Benutzer zu technisch sein. Letzteres wäre benutzerfreundlicher, aber möglicherweise schwer umzusetzen. Wir entschieden uns, zunächst mit regulären Ausdrücken zu starten, um zu sehen, wohin uns dies führen würde, da der anfängliche Aufwand minimal wäre.

Was sind Reguläre Ausdrücke

Reguläre Ausdrücke (oder kurz oft "RegEx" für engl. regular expression) sind mächtige Konstrukte, die für die Mustererkennung in Texten verwendet werden. Sie bieten eine standardisierte Syntax zur Beschreibung von Suchmustern von Übereinstimmung einfacher Zeichenfolgen bis hin zu komplexer Mustererkennung.

Die große Stärke von regulären Ausdrücken liegt in ihrer Flexibilität. Benutzer können anspruchsvolle Suchmuster erstellen, die mit herkömmlichen Filtersystemen schwer oder gar nicht zu realisieren wären. Diese Flexibilität macht RegEx besonders wertvoll für Power-User, die komplexe Datenanalysen durchführen müssen.

Herausforderungen

Reguläre Ausdrücke bringen ihre eigenen Herausforderungen mit sich. Die Syntax kann für fachliche Endnutzer einschüchternd wirken, und bestimmte Zeichen nicht mehr einfach verwendet werden, da diese besondere Bedeutung in regulären Ausdrücken haben (z.B. Klammern, Schrägstrich). Diese technische Komplexität stellt eine hohe Einstiegshürde für nicht-technische Benutzer dar.

Es ist ebenso wichtig zu berücksichtigen, welche Auswirkgungen RegEx-basierte Filter auf die Performance haben. Komplexe reguläre Ausdrücke können die Anwendung erheblich verlangsamen oder sogar vorübergehend einfrieren, insbesondere im Browser-Kontext oder bei der Verarbeitung großer Datenmengen.

Strategien bei der Umsetzung

Freitext Filter vs. Multi-Select Filter

Wir entdeckten einen entscheidenden Unterschied zwischen der Implementierung von RegEx in Freitextfiltern und Multi-Select-Filtern. Bei Freitextfiltern wird der eingegebene Wert gespeichert und automatisch persistiert. Ohne zusätzliche Schutzmaßnahmen könnte ein Benutzer sich potenziell selbst aus der Anwendung aussperren, indem er einen komplexen regulären Ausdruck eingibt, der den Client einfriert.

Im Gegensatz dazu speichern unsere Multi-Select-Filter nur die resultierende Menge der ausgewählten Elemente. Diese Filter enthalten auch einen einfachen UI-Textfilter, der Benutzern hilft, Elemente schnell zu finden, um sie auszuwählen oder abzuwählen. Dieser sekundäre Filter hat keinen persistierten Zustand, sodass es zwar immer noch möglich ist, die Anwendung mit einem komplexen RegEx einzufrieren, aber ein Neuladen der Anwendung stellt einen funktionierenden Zustand wieder her. Dieser Ansatz ist nicht ideal, reduziert jedoch das Risiko im Vergleich zu Freitextfiltern erheblich.

Umgang mit fehlerhaften regulären Ausdrücken

Wenn man Benutzereingaben in Form von rohen regulären Ausdrücken zulässt, muss man sich Gedanken darüber machen, wie man mit Parsing-Fehlern geht. Dies erhöht die Komplexität bei der Verwaltung des Filterzustands, da ein Filter Fehlerzustände berücksichtigen und UI-Elemente enthalten muss, die Benutzer über Fehler informieren. Automatisch generierte Fehlermeldungen RegEx-Parsing-Fehler sind oft technisch und für fachliche Endbenutzer schwer verständlich. Um Kosten und Nutzen in Einklang zu bringen, haben wir uns entschieden, nicht parse-bare reguläre Ausdrücke in unserem Proof of Concept als einfache Textfilter zu behandeln. Dieser Ansatz gewährleistet eine reibungslose Benutzererfahrung und nutzt dennoch die Vorteile von RegEx, wenn diese korrekt verwendet werden.

Einschränkungen und Edge Cases

Eine wichtige Einschränkung unserer Implementierung besteht darin, nur der resultierende Zustand des Multi-Select-Filters erhalten bleibt. Die ursprüngliche Absicht bzw. Intention des Nutzers, die über den regulären Ausdruck formuliert wurde, geht verloren. Es werden nur die ausgewählten Elemente gespeichert, nicht das ursprüngliche RegEx-Muster. Folglich kann der Filter beim Hinzufügen neuer Daten zum System den ursprünglichen regulären Ausdruck nicht automatisch auf den aktualisierten Datensatz erneut anwenden.

Unser gewählter Ansatz

Nach sorgfältiger Überlegung kamen wir zu dem Schluss, dass reguläre Ausdrücke für die meisten unserer regulären Anwendungsbenutzer zu technisch wären. Unsere Daten zeigen, dass die Mehrheit der Benutzer nur die grundlegenden Funktionen unserer Anwendung nutzt. Daher haben wir uns entschieden, RegEx-Filter als Opt-in-Funktion bereitzustellen, die nur einer ausgewählten Benutzergruppe basierend auf bestehenden Rollen innerhalb unserer Anwendung zur Verfügung steht. Für diejenigen mit Zugriff haben wir ein kompaktes RegEx-Cheat-Sheet zur schnellen Orientierung bereitgestellt und eine klare Warnung über die potenziellen Auswirkungen auf die Performance bei der Nutzung dieser Funktion hinzugefügt.

Die Integration von regulären Ausdrücken in unser Filtersystem war eine Reise voller technischer Herausforderungen und wertvoller Erkenntnisse. Während RegEx leistungsstarke und flexible Filtermöglichkeiten bietet, bringt es auch Komplexität und potenzielle Performanceprobleme mit sich, die sorgfältig abgewogen werden müssen. Indem wir RegEx-Filter als Opt-in-Funktion für Power-User bereitstellen und klare Anleitungen zur Anwendung geben, haben wir eine Balance zwischen fortschrittlicher Funktionalität und Benutzerfreundlichkeit gefunden. Dieser Ansatz ermöglicht es uns, die Anforderungen unserer anspruchsvollsten Benutzer zu erfüllen und gleichzeitig ein reibungsloses Erlebnis für die breite Benutzerbasis zu gewährleisten. Letztendlich hat die Entscheidung, RegEx-Filter zu integrieren, die Vielseitigkeit unserer Anwendung verbessert und ermöglicht eine anspruchsvollere Datenanalyse und -erforschung.