Jakie jest znaczenie g
flagi w wyrażeniach regularnych?
Jaka jest różnica między /.+/g
i /.+/
?
javascript
regex
intelis
źródło
źródło
var r = /a/g; console.log(r.test('a'), r.test('a')); // true false
Przykład w JavaScript, aby wyjaśnić:
źródło
g
to flaga wyszukiwania globalnego.Globalna flaga wyszukiwania sprawia, że RegExp wyszukuje wzorzec w całym ciągu, tworząc tablicę wszystkich wystąpień, które może znaleźć, pasujących do danego wzorca.
Zatem różnica między
/.+/g
i/.+/
polega na tym, żeg
wersja znajdzie każde wystąpienie, a nie tylko pierwsze.źródło
Nie ma różnicy między
/.+/g
i,/.+/
ponieważ oba zawsze dopasowują cały ciąg tylko raz. Tog
robi różnicę, jeśli wyrażenie regularne może pasować więcej niż raz lub zawiera grupy, w takim przypadku.match()
zwróci tablicę dopasowań zamiast tablicy grup.źródło
Jak zauważył @matiska,
g
flaga również ustawialastIndex
właściwość.Bardzo ważnym efektem ubocznym jest to, że jeśli ponownie używasz tej samej instancji wyrażenia regularnego względem pasującego ciągu, ostatecznie zakończy się to niepowodzeniem, ponieważ wyszukiwanie rozpocznie się dopiero od
lastIndex
.źródło
Oprócz wspomnianego już znaczenia
g
flagi wpływa naregexp.lastIndex
właściwości:Źródła: Mozilla Developer Network
źródło
G w wyrażeniach regularnych to a definiuje przeszukiwanie globalne, co oznacza, że będzie szukać wszystkich wystąpień we wszystkich wierszach.
źródło
Podam przykład na podstawie sznurka. Jeśli chcemy usunąć wszystkie wystąpienia z łańcucha. Powiedzmy, że chcemy usunąć wszystkie wystąpienia „o” z „” z „hello world”
źródło
g
->
zwraca wszystkie dopasowaniawithout g
->
zwraca pierwsze dopasowanieprzykład:
'1 2 1 5 6 7'.match(/\d+/)
zwraca["1", index: 0, input: "1 2 1 5 6 7", groups: undefined]
. Jak widzisz, możemy wziąć tylko pierwszy mecz"1"
.'1 2 1 5 6 7'.match(/\d+/g)
zwraca tablicę wszystkich dopasowań["1", "2", "1", "5", "6", "7"]
.źródło