Yanıtlar:
gküresel arama içindir. Yani tüm oluşumlarla eşleşecek. Genellikle şunu da göreceksinizi bunun ne anlama geldiğini .
Referans: global - JavaScript | MDN
"G" bayrağı, normal ifadenin bir dizedeki tüm olası eşleşmelere karşı test edilmesi gerektiğini belirtir.
gBayrak olmazsa, sadece ilkini test eder.
var r = /a/g; console.log(r.test('a'), r.test('a')); // true false
g küresel arama bayrağıdır.
Genel arama bayrağı, RegExp'in dize boyunca bir kalıp aramasını sağlar ve verilen kalıpla eşleşen tüm oluşumlardan oluşan bir dizi oluşturur.
Arasındaki fark Yani /.+/gve /.+/ olmasıdır gversiyon yerine ilk her olay bulacaksınız.
@Matiska'nın belirttiği gibi, gbayraklastIndex mülkü de .
Bunun çok önemli bir yan etkisi, aynı regex örneğini eşleşen bir dizeye karşı yeniden kullanıyorsanız, sonunda başarısız olacaktır çünkü yalnızca 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);
gBayrağın daha önce bahsedilen anlamının yanı sıra , regexp.lastIndexmülkü etkiler :
LastIndex, bir sonraki eşleşmenin başlayacağı dizini belirten normal ifade örneklerinin okuma / yazma tamsayı özelliğidir. (...) Bu özellik, yalnızca normal ifade örneği genel bir aramayı belirtmek için "g" bayrağını kullanıyorsa ayarlanır.
Referans: Mozilla Geliştirici Ağı
Normal ifadelerde G, bir genel aramayı tanımlar, yani tüm satırlardaki tüm örnekleri arayacağı anlamına gelir.
g -> tüm maçları döndürürwithout g -> ilk eşleşmeyi döndürürmisal:
'1 2 1 5 6 7'.match(/\d+/)döner ["1", index: 0, input: "1 2 1 5 6 7", groups: undefined]. Gördüğünüz gibi sadece ilk maçı yapabiliriz "1".'1 2 1 5 6 7'.match(/\d+/g)tüm eşleşmelerin bir dizisini döndürür ["1", "2", "1", "5", "6", "7"].