Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
Assertions
Assertions umfassen Grenzen, die Anfänge und Enden von Zeilen und Wörtern markieren, sowie andere Muster, die auf irgendeine Weise anzeigen, dass ein Treffer möglich ist (einschließlich Look-Ahead-, Look-Behind- und bedingter Ausdrücke).
In diesem Artikel
Probieren Sie es aus
const text = "A quick fox";const regexpLastWord = /\w+$/;console.log(text.match(regexpLastWord));// Expected output: Array ["fox"]const regexpWords = /\b\w+\b/g;console.log(text.match(regexpWords));// Expected output: Array ["A", "quick", "fox"]const regexpFoxQuality = /\w+(?= fox)/;console.log(text.match(regexpFoxQuality));// Expected output: Array ["quick"]Typen
>Grenztyp-Assertions
| Zeichen | Bedeutung |
|---|---|
^ | Anfangs-Grenze des Eingabe-Assertions: Passt zum Anfang der Eingabe. Wenn das Hinweis: Dieses Zeichen hat eine andere Bedeutung, wenn es am Anfang einerZeichenklasse erscheint. |
$ | Ende-Grenze des Eingabe-Assertions: Passt zum Ende der Eingabe. Wenn das |
\b | Wort-Grenze Assertion: Passt zu einer Wortgrenze. Dies ist die Position, an der ein Wortzeichen nicht von einem anderen Wortzeichen gefolgt oder davor ist, wie zwischen einem Buchstaben und einem Leerzeichen. Beachten Sie, dass eine übereinstimmende Wortgrenze nicht in der Übereinstimmung enthalten ist. Mit anderen Worten, die Länge einer übereinstimmenden Wortgrenze ist null. Beispiele:
Um ein Rückschritt-Zeichen ( |
\B | Nicht-Wort-Grenze Assertion: Passt zu einer Nicht-Wortgrenze. Dies ist eine Position, an der das vorherige und das nächste Zeichen vom gleichen Typ sind: Entweder müssen beide Wörter oder beide Nicht-Wörter sein, zum Beispiel zwischen zwei Buchstaben oder zwischen zwei Leerzeichen. Der Anfang und das Ende eines Strings werden als Nicht-Wörter betrachtet. Genau wie die übereinstimmende Wortgrenze wird auch die übereinstimmende Nicht-Wortgrenze nicht in der Übereinstimmung enthalten. Zum Beispiel passt |
Andere Assertions
Hinweis:Das? Zeichen kann auch als Quantifizierer verwendet werden.
| Zeichen | Bedeutung |
|---|---|
x(?=y) | Lookahead Assertion: Passt zu "x" nur wenn "x" von "y" gefolgt wird. Zum Beispiel passt |
x(?!y) | Negative Lookahead Assertion: Passt zu "x" nur wenn "x" nicht von "y" gefolgt wird. Zum Beispiel passt |
(?<=y)x | Lookbehind Assertion: Passt zu "x" nur wenn "x" von "y" vorangegangen wird. Zum Beispiel passt |
(?<!y)x | Negative Lookbehind Assertion: Passt zu "x" nur wenn "x" nicht von "y" vorangegangen wird. Zum Beispiel passt |
Beispiele
>Allgemeines Übersicht-Beispiel von Grenztypen
// Using Regex boundaries to fix buggy string.buggyMultiline = `tey, ihe light-greon appletangs on ihe greon traa`;// 1) Use ^ to fix the matching at the beginning of the string, and right after newline.buggyMultiline = buggyMultiline.replace(/^t/gim, "h");console.log(1, buggyMultiline); // fix 'tey' => 'hey' and 'tangs' => 'hangs' but do not touch 'traa'.// 2) Use $ to fix matching at the end of the text.buggyMultiline = buggyMultiline.replace(/aa$/gim, "ee.");console.log(2, buggyMultiline); // fix 'traa' => 'tree.'.// 3) Use \b to match characters right on border between a word and a space.buggyMultiline = buggyMultiline.replace(/\bi/gim, "t");console.log(3, buggyMultiline); // fix 'ihe' => 'the' but do not touch 'light'.// 4) Use \B to match characters inside borders of an entity.fixedMultiline = buggyMultiline.replace(/\Bo/gim, "e");console.log(4, fixedMultiline); // fix 'greon' => 'green' but do not touch 'on'.Übereinstimmung des Anfangs der Eingabe mit einem ^ Steuerzeichen
Verwenden Sie^, um auf den Anfang der Eingabe zu passen. In diesem Beispiel können wir die Früchte erhalten, die mit 'A' beginnen, indem wir einen/^A/ Regex verwenden. Zum Auswählen geeigneter Früchte können wir die Methodefilter mit einerarrow Funktion verwenden.
const fruits = ["Apple", "Watermelon", "Orange", "Avocado", "Strawberry"];// Select fruits started with 'A' by /^A/ Regex.// Here '^' control symbol used only in one role: Matching beginning of an input.const fruitsStartsWithA = fruits.filter((fruit) => /^A/.test(fruit));console.log(fruitsStartsWithA); // [ 'Apple', 'Avocado' ]Im zweiten Beispiel wird^ sowohl zum Anpassen an den Anfang der Eingabe als auch zur Erstellung einer negierten oder ergänzten Zeichenklasse verwendet, wenn es innerhalb vonZeichenklassen verwendet wird.
const fruits = ["Apple", "Watermelon", "Orange", "Avocado", "Strawberry"];// Selecting fruits that do not start by 'A' with a /^[^A]/ regex.// In this example, two meanings of '^' control symbol are represented:// 1) Matching beginning of the input// 2) A negated or complemented character class: [^A]// That is, it matches anything that is not enclosed in the square brackets.const fruitsStartsWithNotA = fruits.filter((fruit) => /^[^A]/.test(fruit));console.log(fruitsStartsWithNotA); // [ 'Watermelon', 'Orange', 'Strawberry' ]Sehen Sie mehr Beispiele in derEingabe-Grenz-Assertion Referenz.
Übereinstimmung einer Wortgrenze
In diesem Beispiel passen wir auf Fruchtnamen, die ein Wort enthalten, das auf "en" oder "ed" endet.
const fruitsWithDescription = ["Red apple", "Orange orange", "Green Avocado"];// Select descriptions that contains 'en' or 'ed' words endings:const enEdSelection = fruitsWithDescription.filter((description) => /(?:en|ed)\b/.test(description),);console.log(enEdSelection); // [ 'Red apple', 'Green Avocado' ]Sehen Sie mehr Beispiele in derWort-Grenz-Assertion Referenz.
Lookahead Assertion
In diesem Beispiel passen wir nur dann auf das Wort "First", wenn es von dem Wort "test" gefolgt wird, aber wir schließen "test" nicht in die Übereinstimmungsergebnisse ein.
const regex = /First(?= test)/g;console.log("First test".match(regex)); // [ 'First' ]console.log("First peach".match(regex)); // nullconsole.log("This is a First test in a year.".match(regex)); // [ 'First' ]console.log("This is a First peach in a month.".match(regex)); // nullSehen Sie mehr Beispiele in derLookahead Assertion Referenz.
Grundlegendes Beispiel für negative Lookahead-Assertion
Zum Beispiel passt/\d+(?!\.)/ zu einer Zahl nur wenn sie nicht von einem Dezimalpunkt gefolgt wird./\d+(?!\.)/.exec('3.141') passt zu "141", aber nicht zu "3".
console.log(/\d+(?!\.)/g.exec("3.141")); // [ '141', index: 2, input: '3.141' ]Sehen Sie mehr Beispiele in derLookahead Assertion Referenz.
Unterschiedliche Bedeutungen der '?!' Kombination in Assertions und Zeichenklassen
Die Kombination?! hat unterschiedliche Bedeutungen in Assertions wie/x(?!y)/ undZeichenklassen wie[^?!].
const orangeNotLemon = "Do you want to have an orange? Yes, I do not want to have a lemon!";// Different meaning of '?!' combination usage in Assertions /x(?!y)/ and Ranges /[^?!]/const selectNotLemonRegex = /[^?!]+have(?! a lemon)[^?!]+[?!]/gi;console.log(orangeNotLemon.match(selectNotLemonRegex)); // [ 'Do you want to have an orange?' ]const selectNotOrangeRegex = /[^?!]+have(?! an orange)[^?!]+[?!]/gi;console.log(orangeNotLemon.match(selectNotOrangeRegex)); // [ ' Yes, I do not want to have a lemon!' ]Lookbehind Assertion
In diesem Beispiel ersetzen wir das Wort "orange" durch "apple", nur wenn es vom Wort "ripe" vorangegangen wird.
const oranges = ["ripe orange A", "green orange B", "ripe orange C"];const newFruits = oranges.map((fruit) => fruit.replace(/(?<=ripe )orange/, "apple"),);console.log(newFruits); // ['ripe apple A', 'green orange B', 'ripe apple C']Sehen Sie mehr Beispiele in derLookbehind Assertion Referenz.