Yanıtlar:
g
kü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.
g
Bayrak 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 /.+/g
ve /.+/
olmasıdır g
versiyon yerine ilk her olay bulacaksınız.
@Matiska'nın belirttiği gibi, g
bayraklastIndex
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);
g
Bayrağın daha önce bahsedilen anlamının yanı sıra , regexp.lastIndex
mü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"]
.