Antworten:
g
ist für die globale Suche. Das heißt, es wird mit allen Vorkommen übereinstimmen. Normalerweise sehen Sie auch, i
was bedeutet, Groß- und Kleinschreibung zu ignorieren.
Referenz: global - JavaScript | MDN
Das "g" -Flag gibt an, dass der reguläre Ausdruck gegen alle möglichen Übereinstimmungen in einer Zeichenfolge getestet werden soll.
Ohne die g
Flagge wird nur der erste Test durchgeführt.
var r = /a/g; console.log(r.test('a'), r.test('a')); // true false
g
ist das globale Suchflag.
Das globale Suchflag führt die RegExp-Suche nach einem Muster in der gesamten Zeichenfolge durch und erstellt ein Array aller Vorkommen, die mit dem angegebenen Muster übereinstimmen.
Der Unterschied zwischen /.+/g
und /.+/
besteht darin, dass die g
Version jedes Vorkommen findet und nicht nur das erste.
Es gibt keinen Unterschied zwischen /.+/g
und, /.+/
da beide nur einmal mit der gesamten Zeichenfolge übereinstimmen. Dies g
macht einen Unterschied, ob der reguläre Ausdruck mehr als einmal übereinstimmen könnte oder Gruppen enthält. In diesem Fall .match()
wird ein Array der Übereinstimmungen anstelle eines Arrays der Gruppen zurückgegeben.
Wie @matiska hervorhob, setzt das g
Flag daslastIndex
Eigenschaft.
Ein sehr wichtiger Nebeneffekt davon ist, dass wenn Sie dieselbe Regex-Instanz für eine übereinstimmende Zeichenfolge wiederverwenden, diese möglicherweise fehlschlägt, da sie erst bei der Suche beginnt lastIndex
.
// regular regex
const regex = /foo/;
// same regex with global flag
const regexG = /foo/g;
const str = " foo foo foo ";
const test = (r) => console.log(
r,
r.lastIndex,
r.test(str),
r.lastIndex
);
// Test the normal one 4 times (success)
test(regex);
test(regex);
test(regex);
test(regex);
// Test the global one 4 times
// (3 passes and a fail)
test(regexG);
test(regexG);
test(regexG);
test(regexG);
Neben der bereits erwähnten Bedeutung der g
Flagge beeinflusst sie das regexp.lastIndex
Eigentum:
Der lastIndex ist eine Lese- / Schreib-Integer-Eigenschaft von Instanzen mit regulären Ausdrücken, die den Index angibt, bei dem die nächste Übereinstimmung gestartet werden soll. (...) Diese Eigenschaft wird nur festgelegt, wenn die Instanz des regulären Ausdrucks das Flag "g" verwendet, um eine globale Suche anzuzeigen.
Referenz: Mozilla Developer Network
G in regulären Ausdrücken definiert eine globale Suche, dh, es wird nach allen Instanzen in allen Zeilen gesucht.
g
->
gibt alle Übereinstimmungen zurückwithout g
->
Gibt die erste Übereinstimmung zurückBeispiel:
'1 2 1 5 6 7'.match(/\d+/)
kehrt zurück ["1", index: 0, input: "1 2 1 5 6 7", groups: undefined]
. Wie Sie sehen, können wir nur das erste Spiel bestreiten "1"
.'1 2 1 5 6 7'.match(/\d+/g)
Gibt ein Array aller Übereinstimmungen zurück ["1", "2", "1", "5", "6", "7"]
.