MDN sagt:Was sagt Regex 'y'?
eine "sticky" Suche ausführen zu können, dass Spiele in der aktuellen Position in der Zielzeichenfolge beginnen, die Flagge y verwenden.
Ich verstehe es nicht ganz.
MDN sagt:Was sagt Regex 'y'?
eine "sticky" Suche ausführen zu können, dass Spiele in der aktuellen Position in der Zielzeichenfolge beginnen, die Flagge y verwenden.
Ich verstehe es nicht ganz.
Objekte mit regulärem Ausdruck haben eine lastIndex
Eigenschaft, die je nach den Flags g
(global) und y
(sticky) unterschiedlich verwendet wird. Das Flag y
(sticky) weist den regulären Ausdruck an, bei lastIndex
und nur um lastIndex
(nicht früher oder später in der Zeichenfolge) nach einer Übereinstimmung zu suchen.
Beispiele sind im Wert von 1024 Wörter:
var str = "a0bc1";
// Indexes:
var rexWithout = /\d/;
var rexWith = /\d/y;
// Without:
rexWithout.lastIndex = 2; // (This is a no-op, because the regex
// doesn't have either g or y.)
console.log(rexWithout.exec(str)); // ["0"], found at index 1, because without
// the g or y flag, the search is always from
// index 0
// With, unsuccessful:
rexWith.lastIndex = 2; // Says to *only* match at index 2.
console.log(rexWith.exec(str)); // => null, there's no match at index 2,
// only earlier (index 1) or later (index 4)
// With, successful:
rexWith.lastIndex = 1; // Says to *only* match at index 1.
console.log(rexWith.exec(str)); // => ["0"], there was a match at index 1.
// With, successful again:
rexWith.lastIndex = 4; // Says to *only* match at index 4.
console.log(rexWith.exec(str)); // => ["1"], there was a match at index 4.
.as-console-wrapper {
max-height: 100% !important;
}
Kompatibilität Hinweis:
Spider JavaScript-Engine Firefox hat die y
Flagge schon seit Jahren, aber es wasn Teil der Spezifikation bis ES2015 (Juni 2015). Auch hatte Firefox für eine ganze Weile a bug in the handling of the y
flag in Bezug auf die ^
Behauptung, aber es wurde irgendwo zwischen Firefox 43 (hat den Fehler) und Firefox 47 (nicht) behoben. Sehr alte Versionen von Firefox (zB 3.6) hatten y
und hatten den Fehler nicht, also war es eine Regression, die später passierte (nicht definiertes Verhalten für das Flag y
), und dann behoben wurde.
Sie ein Beispiel finden Sie hier:
Außer dass IMHO sollte das Beispiel sein
var regex = /^(\S+) line\n?/y;
anstelle von
var regex = /(\S+) line\n?/y;
mit dieser Linie, da der Code das gleiche Ergebnis liefert, ob Sie
var regex = /(\S+) line\n?/y;
oder
var regex = /(\S+) line\n?/g;
sagen