Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. JavaScript-Referenz
  4. Eingebaute Standardobjekte
  5. RegExp
  6. sticky

Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.

View in EnglishAlways switch to English

RegExp.prototype.sticky

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨September 2016⁩.

Diesticky Zugriffseigenschaft vonRegExp Instanzen gibt zurück, ob dasy-Flag mit diesem regulären Ausdruck verwendet wird oder nicht.

Probieren Sie es aus

const str = "table football";const regex = /foo/y;regex.lastIndex = 6;console.log(regex.sticky);// Expected output: trueconsole.log(regex.test(str));// Expected output: trueconsole.log(regex.test(str));// Expected output: false

Beschreibung

RegExp.prototype.sticky hat den Werttrue, wenn dasy-Flag verwendet wurde; andernfallsfalse. Dasy-Flag zeigt an, dass der reguläre Ausdruck versucht, die Zielzeichenfolge nur vom durch dielastIndex Eigenschaft angegebenen Index aus zu matchen (und im Gegensatz zu einem globalen regulären Ausdruck nicht versucht, von späteren Indizes zu matchen).

Der Set-Zugang vonsticky istundefined. Sie können diese Eigenschaft nicht direkt ändern.

Für sowohl sticky als auchglobale reguläre Ausdrücke gilt:

  • Sie beginnen das Matching beilastIndex.
  • Wenn das Matching erfolgreich ist, wirdlastIndex zum Ende des Matches vorgerückt.
  • WennlastIndex außerhalb des Bereichs der aktuell gematchten Zeichenfolge liegt, wirdlastIndex auf 0 zurückgesetzt.

Jedoch ist das Verhalten, wenn das Matching fehlschlägt, für dieexec() Methode unterschiedlich:

  • Wenn dieexec() Methode auf einem sticky regulären Ausdruck aufgerufen wird und der reguläre Ausdruck beimlastIndex kein Match findet, gibt der reguläre Ausdruck sofortnull zurück und setztlastIndex auf 0 zurück.
  • Wenn dieexec() Methode auf einem globalen regulären Ausdruck aufgerufen wird und der reguläre Ausdruck beimlastIndex kein Match findet, versucht sie, vom nächsten Zeichen aus zu matchen, und so weiter, bis ein Match gefunden wird oder das Ende der Zeichenkette erreicht ist.

Für dieexec() Methode verhält sich ein regulärer Ausdruck, der sowohl sticky als auch global ist, genauso wie ein sticky und nicht globaler regulärer Ausdruck. Datest() ein einfacher Wrapper umexec() ist, würdetest() das globale Flag ignorieren und ebenfalls sticky Matches durchführen. Allerdings ist das globale Flag aufgrund vieler anderer Methoden, die speziell das Verhalten globaler regulärer Ausdrücke behandeln, im Allgemeinen orthogonal zum sticky Flag.

  • String.prototype.matchAll() (welchesRegExp.prototype[Symbol.matchAll]() aufruft):y,g undgy sind alle unterschiedlich.
    • Füry-reguläre Ausdrücke:matchAll() wirft einen Fehler;[Symbol.matchAll]() gibt dasexec() Ergebnis genau einmal zurück, ohne denlastIndex des regulären Ausdrucks zu aktualisieren.
    • Fürg- odergy-reguläre Ausdrücke: gibt einen Iterator zurück, der eine Folge vonexec() Ergebnissen liefert.
  • String.prototype.match() (welchesRegExp.prototype[Symbol.match]() aufruft):y,g undgy sind alle unterschiedlich.
    • Füry-reguläre Ausdrücke: gibt dasexec() Ergebnis zurück und aktualisiert denlastIndex des regulären Ausdrucks.
    • Fürg- odergy-reguläre Ausdrücke: gibt ein Array allerexec() Ergebnisse zurück.
  • String.prototype.search() (welchesRegExp.prototype[Symbol.search]() aufruft): dasg-Flag ist immer irrelevant.
    • Füry- odergy-reguläre Ausdrücke: gibt immer0 (wenn der Anfang der Zeichenkette matcht) oder-1 (wenn der Anfang nicht matcht) zurück, ohne denlastIndex des regulären Ausdrucks beim Verlassen zu aktualisieren.
    • Fürg-reguläre Ausdrücke: gibt den Index des ersten Matches in der Zeichenkette oder-1 zurück, wenn kein Match gefunden wird.
  • String.prototype.split() (welchesRegExp.prototype[Symbol.split]() aufruft):y,g undgy haben alle dasselbe Verhalten.
  • String.prototype.replace() (welchesRegExp.prototype[Symbol.replace]() aufruft):y,g undgy sind alle unterschiedlich.
    • Füry-reguläre Ausdrücke: ersetzt einmal beim aktuellenlastIndex und aktualisiertlastIndex.
    • Fürg- undgy-reguläre Ausdrücke: ersetzt alle Vorkommen, die vonexec() gematcht werden.
  • String.prototype.replaceAll() (welchesRegExp.prototype[Symbol.replace]() aufruft):y,g undgy sind alle unterschiedlich.
    • Füry-reguläre Ausdrücke:replaceAll() wirft einen Fehler.
    • Fürg- undgy-reguläre Ausdrücke: ersetzt alle Vorkommen, die vonexec() gematcht werden.

Beispiele

Verwendung eines regulären Ausdrucks mit dem sticky Flag

js
const str = "#foo#";const regex = /foo/y;regex.lastIndex = 1;regex.test(str); // trueregex.lastIndex = 5;regex.test(str); // false (lastIndex is taken into account with sticky flag)regex.lastIndex; // 0 (reset after match failure)

Verankertes sticky Flag

In mehreren Versionen hatte Firefox's SpiderMonkey-Engineeinen Fehler in Bezug auf die^-Assertion und das sticky Flag, der es ermöglichte, dass Ausdrücke, die mit der^-Assertion beginnen und das sticky Flag verwenden, matchen konnten, wenn sie es nicht sollten. Der Fehler wurde einige Zeit nach Firefox 3.6 eingeführt (welches das sticky Flag, aber nicht den Fehler hatte) und 2015 behoben. Vielleicht wegen des Fehlers hebt die Spezifikationausdrücklich hervor, dass:

Selbst wenn dasy Flag mit einem Muster verwendet wird, matcht^ immer nur am Anfang vonInput, oder (wennrer.[[Multiline]]true ist) am Anfang einer Zeile.

Beispiele für korrektes Verhalten:

js
const regex1 = /^foo/y;regex1.lastIndex = 2;regex1.test("..foo"); // false - index 2 is not the beginning of the stringconst regex2 = /^foo/my;regex2.lastIndex = 2;regex2.test("..foo"); // false - index 2 is not the beginning of the string or lineregex2.lastIndex = 2;regex2.test(".\nfoo"); // true - index 2 is the beginning of a line

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# sec-get-regexp.prototype.sticky

Browser-Kompatibilität

Siehe auch

Help improve MDN

Learn how to contribute Diese Seite wurde automatisch aus dem Englischen übersetzt.

[8]ページ先頭

©2009-2025 Movatter.jp