2012-10-20 19 views

Odpowiedz

66

g jest dla globalnego wyszukiwania. Oznacza to, że pasuje do wszystkich wystąpień. Zwykle zobaczysz także i, co oznacza zignorowanie wielkości liter.

Referencje: global - JavaScript | MDN

„g” Flaga wskazuje, że wyrażenie regularne powinny być badane przed wszystkimi możliwymi kombinacjami w ciągu.

Bez flagi g testuje się tylko dla pierwszego.

+0

Tak/g flaga nie ma znaczenia podczas korzystania z .test funkcję, ponieważ tylko znajdzie pierwszy mecz tak, prawda? – xr280xr

10

g jest globalna flaga wyszukiwania.

globalna flaga wyszukiwania sprawia, że ​​przeszukiwanie RegExp za wzór na całym ciągiem, tworząc tablicę wszystkich zdarzeń może znaleźć pasujące do podanego wzorca.

Różnica między /.+/g a /.+/ polega na tym, że wersja g znajdzie każde wystąpienie zamiast tylko pierwszego.

7

Nie ma różnicy między /.+/g i /.+/, ponieważ będą one jednocześnie pasować tylko cały ciąg. Wartość g ma znaczenie, jeśli wyrażenie regularne może pasować więcej niż jeden raz lub zawiera grupy, w którym to przypadku .match() zwróci tablicę dopasowań zamiast tablicy grup.

3

G w wyrażeniach regularnych to definiuje wyszukiwanie globalne, co oznacza, że ​​będzie szukać wszystkich przypadkach na wszystkich liniach.

22

Przykład w JavaScript, żeby wyjaśnić:

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

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

Obok wspomnianego już znaczenia g flagą, wpływa regexp.lastIndex właściwość:

lastIndex jest właściwość odczytu/zapisu całkowitą wyrażenia regularnego instancji określający indeks, od którego rozpocznie się następne dopasowanie. (...) Ta właściwość ma wartość tylko wtedy, gdy wyrażenie regularne instancja używane „g” flagę, aby wskazać wyszukiwanie globalne.

referencyjny: Mozilla Developer Network

3

Jak @matiska wskazał, flaga g ustawia właściwość lastIndex również.

Bardzo ważnym skutkiem ubocznym jest to, że jeśli ponownie użyjesz tej samej instancji wyrażenia regularnego względem zgodnego ciągu, w końcu się to nie uda, ponieważ rozpoczyna się wyszukiwanie tylko pod numerem 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);

Powiązane problemy