it-swarm.com.de

Was bedeutet die "g" -Flagge in regulären Ausdrücken?

Was bedeutet die Variable g in regulären Ausdrücken? 

Was ist der Unterschied zwischen /.+/g und /.+/?

77
intelis

g ist für die globale Suche. Das bedeutet, dass es mit allen Vorkommnissen übereinstimmen wird. Normalerweise sehen Sie auch i, was bedeutet, dass der Fall ignoriert wird.

Referenz: global - JavaScript | MDN

Das "g" -Flag gibt an, dass der reguläre Ausdruck auf alle möglichen Übereinstimmungen in einer Zeichenfolge getestet werden sollte.

Ohne das g-Flag wird nur das erste geprüft.

91
sachleen

Beispiel in Javascript zur Erklärung:

> 'aaa'.match(/a/g)
[ 'a', 'a', 'a' ]

> 'aaa'.match(/a/)
[ 'a', index: 0, input: 'aaa' ]
27
Luke W

g ist das globale Suchflag.

Das globale Suchflag bewirkt, dass RegExp in der gesamten Zeichenfolge nach einem Muster sucht und ein Array aller Vorkommen erstellt, die es finden kann und mit dem angegebenen Muster übereinstimmt.

Der Unterschied zwischen /.+/g und /.+/ besteht also darin, dass die g-Version jedes Vorkommen statt nur das erste findet.

10
DaveyLaser

Es gibt keinen Unterschied zwischen /.+/g und /.+/, da beide nur einmal mit der gesamten Zeichenfolge übereinstimmen. Die Variable g unterscheidet, wenn der reguläre Ausdruck mehr als einmal übereinstimmen könnte oder Gruppen enthält. In diesem Fall gibt .match() ein Array der Übereinstimmungen anstelle eines Arrays der Gruppen zurück.

8
Neil

Wie @matiska hervorgehoben hat, setzt das Flag g auch die Eigenschaft lastIndex.

Ein sehr wichtiger Nebeneffekt: Wenn Sie dieselbe Regex-Instanz gegen eine übereinstimmende Zeichenfolge wiederverwenden, schlägt die Suche schließlich fehl, da nur die lastIndex-Suche beginnt.

// 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);

6
cchamberlain

Neben der bereits erwähnten Bedeutung von g flag beeinflusst es die regexp.lastIndex-Eigenschaft:

Der lastIndex ist eine Integer-Eigenschaft des regulären Ausdrucks Instanzen, die den Index angeben, an dem die nächste Übereinstimmung beginnen soll. (...) Diese Eigenschaft wird nur festgelegt, wenn die Instanz des regulären Ausdrucks verwendet das Flag "g", um eine globale Suche anzuzeigen.

Referenz: Mozilla Developer Network

5
matiska

G in regulären Ausdrücken definiert eine globale Suche, was bedeutet, dass alle Instanzen in allen Zeilen gesucht werden.

3
Neonguardian

Gibt ein Beispiel basierend auf String. Wenn wir alle Vorkommen aus einer Zeichenfolge entfernen möchten. Lass uns sagen, ob wir alle Vorkommen von "o" mit "" von "Hallo Welt"

"hello world".replace(/o/g,'');
0
Deepak