2015-06-17 20 views
6

Beni açıklayan herkes, neden yerel Regex değişken ve yerel olmayan Regex değişkeninin farklı çıktılara sahip olduğunu açıklayabilir.Regex.test() doğru bir yanlış sıra veriyor mu?

var regex1 = /a|b/g; 
function isAB1() { 
    return regex1.test('a'); 
} 
console.log(isAB1()); // true 
console.log(isAB1()); // false 
console.log(isAB1()); // true 
console.log(isAB1()); // false 


function isAB2() { 
    var regex2 = /a|b/g; 
    return regex2.test('a'); 
} 
console.log(isAB2()); // true 
console.log(isAB2()); // true 
console.log(isAB2()); // true 
console.log(isAB2()); // true 

aynı here için JSFiddle oluşturduk.

+1

: "Aynı global normal ifade örneğinde birden çok kez çağrılır" önceki eşleşmeyi geç. – Hacketo

cevap

6

Düzenli olarak, sonuçların global olarak eşleşeceği anlamına gelen g işaretini verdiniz. Bunu yaparak, normal ifadenizi önceki eşleşmeleriyle ilgili durumdan haberdar etmenizi açıkça talep ettiniz.

var regex1 = /a|b/g; 

> regex1.lastIndex 
0 
> regex1.test('a'); 
true 
> regex1.lastIndex 
1 
> regex1.test('a'); 
false 

ortadan kaldırmak istiyorsanız g Beklediğiniz sonuçlar alırsınız.

İfadelerinizi .lastIndex özelliğinin ne zaman tamamlandığını kontrol edebilirsiniz. [Doc] 'dan (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test)

+0

Evet, haklısınız. Yerel regex2, isAB2'nin her başlatıldığında yeniden başlatılır, yani isAB2 her zaman true olarak döner –

+0

Doğru, her seferinde farklı bir regex. –

+1

İşte bir makale Axel yazdı http://www.2ality.com/2013/08/regexp-g.html –

İlgili konular