SORU
5 EKİM 2009, PAZARTESİ


Neden Javascript global bayrağı ile RegExp yanlış sonuç verir?

Genel bayrağını ve büyük / küçük harf duyarlı bayrağı kullandığımda bu düzenli ifade ile sorun nedir? Sorguya kullanıcı giriş oluşturulur. Sonuç [] doğru, doğru.

var query = 'Foo B';
var re = new RegExp(query, 'gi');
var result = [];
result.push(re.test('Foo Bar'));
result.push(re.test('Foo Bar'));
// result will be [true, false]

CEVAP
5 EKİM 2009, PAZARTESİ


RegExp nesne bir maç oluştuğu lastIndex izler, böylece sonraki son kullanılan dizin, 0 yerine gelen başlayacak maçlar. Bir göz atın:

var query = 'Foo B';
var re = new RegExp(query, 'gi');
var result = [];
result.push(re.test('Foo Bar'));

alert(re.lastIndex);

result.push(re.test('Foo Bar'));

Eğer elle her testten sonra 0 lastIndex Sıfırla istersen eğer, g bayrağı kaldırmak.

İşte görüşler dikte algoritması (bölüm 15.10.6.2):

RegExp.prototip.exec(string)

Gerçekleştirir string ile eşleşen bir düzenli ifadeye düzenli ifade ve karşı bir Dizi içeren bir nesne döndürür MAÇ SONUÇLARI veya null dize dize eşleşmedi Olabilirdi dize) için aranır normal ifadenin geçtiği aşağıdaki gibi desen

  1. S Olabilirdi değeri(string) olsun.
  2. Uzunluk S. uzunluğu olsun
  3. Lastındex özelliği lastındex değer ver.
  4. Toİnteger değeri(lastındex)) olsun.
  5. Eğer küresel özellik ise false, i = 0 alalım.
  6. Ben < 0 veya ben >uzunluğu lastındex 0 olarak ayarlayın ve boş döner.
  7. [[Maç]], argümanlar vererek Ara S ve ben. Eğer [[Maç]] iade arıza adım adım 8; aksi halde r Devlet neden olsun ve adım 10'a git.
  8. Ben = ben 1 izin.
  9. Adım 6'ya git.
  10. E r değiştirir değeri olsun.
  11. Eğer genel özelliği true olursa, e lastındex ayarlayın.
  12. N r yakalar uzunluğu dizi olsun. (Bu aynı şey 15.10.2.1 olarak değer NCapturingParens.)
  13. Aşağıdaki özelliklere sahip bir dönüş yeni bir dizi:
    • Endeksi emlak konumuna ayarlanır tam içinde bir alt dize eşleşiyor S. dize
    • Giriş özelliğini ayarlayın. S.
    • Uzunluk özelliği ayarlanır n 1.
    • 0 özelliği ayarlanır (bölümü yani eşleşen alt Ofset arasında kapsayıcı ve S e özel mahsup).
    • Her biri için ben ^ ben böyle bir tamsayı . 0 ve r n, özelliği Olabilirdi(ben) adlı set r ile eleman yakalar dizi.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Darren Kitchen

    Darren Kitch

    3 EKİM 2011
  • Fr. Eckle Studios

    Fr. Eckle St

    29 Kasım 2006
  • Joanna Okrajni

    Joanna Okraj

    4 EYLÜL 2010