Odpowiedzi:
g
służy do wyszukiwania globalnego. Oznacza to, że będzie pasować do wszystkich wystąpień. Zwykle zobaczysz także, i
co oznacza ignorowanie wielkości liter.
Odniesienie: globalne - JavaScript | MDN
Flaga „g” wskazuje, że wyrażenie regularne powinno być testowane pod kątem wszystkich możliwych dopasowań w ciągu.
Bez g
flagi przetestuje tylko pierwszy.
var r = /a/g; console.log(r.test('a'), r.test('a')); // true false
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, że g
wersja znajdzie każde wystąpienie, a nie tylko pierwsze.
Jak zauważył @matiska, g
flaga również ustawia lastIndex
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
.
// 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);
Oprócz wspomnianego już znaczenia g
flagi wpływa na regexp.lastIndex
właściwości:
LastIndex jest własnością całkowitą do odczytu / zapisu instancji wyrażeń regularnych, która określa indeks, od którego ma się rozpocząć następne dopasowanie. (...) Ta właściwość jest ustawiana tylko wtedy, gdy instancja wyrażenia regularnego używała flagi „g” do wskazania wyszukiwania globalnego.
Źródła: Mozilla Developer Network
G w wyrażeniach regularnych to a definiuje przeszukiwanie globalne, co oznacza, że będzie szukać wszystkich wystąpień we wszystkich wierszach.
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"]
.