JavaScript Regex Wortgrenze (\b)
In JavaScript-regulären Ausdrücken wird der \b-Anker verwendet, um Wortgrenzen zu erkennen. Eine Wortgrenze ist eine Position zwischen einem Wortzeichen (\w) und einem Nicht-Wortzeichen.
Einführung in Wortgrenzen
In JavaScript regulären Ausdrücken wird der \b-Anker verwendet, um Wortgrenzen zu erkennen. Eine Wortgrenze ist eine Position zwischen einem Wortzeichen (definiert durch die \w-Zeichenklasse, die [a-zA-Z0-9_] umfasst) und einem Nicht-Wortzeichen (alles, was kein Wortzeichen ist). Dies ermöglicht das präzise Erkennen ganzer Wörter und ist besonders nützlich für Aufgaben wie Suchen, Ersetzen oder Validieren bestimmter Wortmuster in Texten.
\b ist einer der Regex-Anker. Anders als die Anker für den Anfang und das Ende einer Zeichenkette ^ und $, die eine Übereinstimmung auf die Ränder der Eingabe beschränken, begrenzt \b sie auf die Ränder eines Wortes — ein einziges Muster kann so ganze Wörter an beliebiger Stelle in einer Zeichenkette finden.
Dieses Kapitel behandelt, was als Wortgrenze gilt, wie der entgegengesetzte \B-Anker funktioniert, die nullbreite Natur beider Anker, gängige Muster zur Erkennung ganzer Wörter sowie die Einschränkungen bei Unicode-Text.
Verwendung des \b-Ankers
Der \b-Anker ist eine nullbreite Aussage: Er erkennt eine Position, kein Zeichen. Die Position muss zwischen einem Wortzeichen (eines, das \w erkennt: [a-zA-Z0-9_]) und einem Nicht-Wortzeichen liegen — oder zwischen einem Wortzeichen und dem absoluten Anfang oder Ende der Zeichenkette. Da er nullbreit ist, verbraucht \b nichts; er schränkt nur ein, wo der Rest des Musters übereinstimmen darf.
Es gibt drei Stellen, an denen eine Wortgrenze auftritt:
- Vor dem ersten Zeichen, wenn dieses Zeichen ein Wortzeichen ist.
- Nach dem letzten Zeichen, wenn dieses Zeichen ein Wortzeichen ist.
- Zwischen zwei benachbarten Zeichen, von denen genau eines ein Wortzeichen ist.
Der ergänzende Anker \B erkennt jede Position, die keine Wortgrenze ist.
Um zu sehen, wo die Grenzen tatsächlich liegen, wird an jeder \b-Position eine Markierung eingefügt:
Erläuterung: Die vier Grenzen sind: vor a, nach c (neben dem Leerzeichen), vor d und nach f (Ende der Zeichenkette). Der Leerzeichen-zu-Leerzeichen-Übergang hat keine Grenze, da keine Seite ein Wortzeichen ist.
Beispiel: Erkennung ganzer Wörter
Erläuterung:
- Der Regex
/\bcat\b/erkennt das Wort "cat" als ganzes Wort. - In der Zeichenkette
'The cat is here.'ist "cat" ein eigenständiges Wort, daher ist die Übereinstimmungtrue. - In der Zeichenkette
'The caterpillar is here.'ist "cat" Teil des Wortes "caterpillar", daher ist die Übereinstimmungfalse.
Beispiel: Ganze Wörter im Text suchen
Erläuterung:
- Der Regex
/\bcat\b/gfindet alle Vorkommen von "cat" als ganzes Wort im Text. - Er erkennt nur "cat", nicht "scatter", "caterpillar" oder "catfish", da "cat" in diesen Kontexten kein eigenständiges Wort ist.
- Das Ergebnis ist ein array mit
["cat"].
Nicht-Wortgrenzen (\B)
\B ist das genaue Gegenteil von \b: Es erkennt jede Position, die keine Wortgrenze ist. Das bedeutet, es trifft in der Mitte eines Wortes zu (zwischen zwei Wortzeichen) oder zwischen zwei Nicht-Wortzeichen, und schlägt fehl, wo \b erfolgreich wäre.
Verwende \B, wenn du ein Muster nur dann erkennen möchtest, wenn es eingebettet in einem größeren Wort vorkommt.
Erläuterung:
/\Boo\B/gerfordert eine Nicht-Grenze auf beiden Seiten vonoo.- In
'noon'hat dasooauf beiden Seitenn, sodass beide\B-Aussagen zutreffen — es wird erkannt. - In
'zoo'befindet sichooam Ende des Wortes, sodass dort eine echte Wortgrenze existiert und\Bscheitert. Nur dasooaus'noon'wird zurückgegeben.
Eine praktische Merkhilfe für die Beziehung: An jeder Position trifft genau eine von \b und \B zu.
Praktische Anwendungen
Validierung von Eingabefeldern
Wortgrenzen können nützlich sein, um Eingabefelder zu validieren, in denen exakte Wortübereinstimmungen erforderlich sind.
Erläuterung:
- Der Regex
/^\w+$/stellt sicher, dass die Eingabe ein einzelnes Wort ohne Leerzeichen ist. ^markiert den Anfang der Zeichenkette und$das Ende. Da\wnur Wortzeichen erkennt, erzwingen^und$implizit Wortgrenzen, wodurch\bhier überflüssig ist.\w+erkennt ein oder mehrere Wortzeichen (einschließlich Buchstaben, Ziffern und Unterstriche).'user123'stimmt überein, da es sich um ein einzelnes Wort ohne Leerzeichen handelt.'user 123'stimmt nicht überein, da es ein Leerzeichen enthält, das die Folge der Wortzeichen unterbricht.- Beachte, dass
\wUnterstriche enthält, was die Validierungslogik beeinflussen kann, wenn du diese ausschließen möchtest.
Wörter aus einem Satz extrahieren
Du kannst mithilfe von Wortgrenzen bestimmte Wörter aus einem Satz extrahieren.
Erläuterung:
- Das Regex-Muster
/\btest\w*\b/gierkennt alle Wörter, die mit "test" beginnen. - Das
g-Flag stellt sicher, dass alle Übereinstimmungen in der Zeichenkette zurückgegeben werden. - Das
i-Flag sorgt dafür, dass die Übereinstimmung ohne Berücksichtigung der Groß-/Kleinschreibung erfolgt, sodass sowohl "test" als auch "Testing" erkannt werden. - Das Ergebnis ist
["test", "Testing"], da beide Wörter mit "test" beginnen und von null oder mehr Wortzeichen gefolgt werden.
Kombination von Wortgrenzen mit anderen Mustern
Wortgrenzen können mit anderen Regex-Mustern für komplexere Übereinstimmungen kombiniert werden.
Beispiel: Wörter mit Präfix suchen
Erläuterung:
- Der Regex
/\bpre\w*\b/gerkennt Wörter, die mit dem Präfix "pre" beginnen. \bpremarkiert eine Wortgrenze gefolgt von "pre".\w*erkennt null oder mehr Wortzeichen.\bmarkiert eine Wortgrenze am Ende.- Das Ergebnis ist ein array mit
["preheat", "prefix", "prepare", "pressure"].
Beispiel: Wörter mit bestimmtem Suffix suchen
Erläuterung:
- Der Regex
/\w+ing\b/gerkennt Wörter, die auf "ing" enden. \w+erkennt ein oder mehrere Wortzeichen.ing\berkennt "ing" gefolgt von einer Wortgrenze.- Das Ergebnis ist ein array mit
["running", "walking", "talking", "thinking"].
Wenn du ganze Wörter erkennen oder sicherstellen möchtest, dass Wörter nicht Teil größerer Zeichenketten sind, verwende den \b-Anker, um Wortgrenzen präzise zu definieren
\b für präzise Worterkennung verwenden
Erläuterung:
- Der Regex
/\bdog\b/gerkennt das Wort "dog" als ganzes Wort. - Er erkennt nicht "dogs", da "dog" in diesem Kontext kein eigenständiges Wort ist.
- Das Ergebnis ist ein array mit
["dog"].
Beispiel: Erkennung ganzer Zahlen
Da Ziffern Wortzeichen sind, funktioniert \b auch bei Zahlen — nützlich, um ganze Zahlen aus gemischtem Text zu extrahieren, ohne an einem Dezimalpunkt zu trennen.
Erläuterung:
/\b\d+\b/gerkennt Ziffernfolgen, die zwischen Nicht-Ziffern-Zeichen eigenständig stehen.3.14wird in"3"und"14"aufgeteilt, da.ein Nicht-Wortzeichen ist und sich auf jeder Seite eine Wortgrenze befindet.
Einschränkungen bei Unicode
Der \b-Anker ist ausschließlich auf Basis des ASCII-\w-Zeichensatzes ([a-zA-Z0-9_]) definiert. Buchstaben mit diakritischen Zeichen oder Zeichen aus nicht-lateinischen Schriften werden als Nicht-Wortzeichen behandelt, sodass an unerwarteten Stellen Grenzen auftreten.
Erläuterung:
éist nicht in\wenthalten, daher sieht die Engine eine Wortgrenze zwischencafundé.- Das abschließende
\bnachéerwartet, dasséein Wortzeichen ist — das ist es nicht — sodass die gesamte Aussage scheitert, obwohl der Text eindeutig das Wort "café" enthält.
JavaScript stellt keine Unicode-fähige Version von \b bereit (die Flags u und v ändern seine Definition nicht). Wenn du Wörter mit Akzenten oder nicht-lateinischen Zeichen als ganze Wörter erkennen musst, erstelle deine eigenen Grenzen aus einer expliziten Zeichenklasse, zum Beispiel:
Erläuterung:
\p{L}(aktiviert durch dasu-Flag) erkennt jeden Unicode-Buchstaben.- Der Lookbehind
(?<![\p{L}])und Lookahead(?![\p{L}])bilden eine buchstabengerechte Grenze nach, sodasscaféerkannt wird,caféshingegen nicht. - Dies ist die Standardlösung, wenn ASCII-
\bfür dein Alphabet zu eingeschränkt ist.
Fazit
Der \b-Anker in JavaScript-regulären Ausdrücken ist ein leistungsstarkes Werkzeug zur Erkennung von Wortgrenzen. Mit diesem Anker kannst du präzise und effektive Muster zum Suchen, Ersetzen und Validieren von Wörtern in Texten erstellen. Ob du an Suchfunktionen, Datenvalidierung oder Textverarbeitung arbeitest — das Verstehen und Nutzen von Wortgrenzen kann deine Regex-Fähigkeiten erheblich verbessern.