2016-04-12 17 views
-3

, (a.)Eşleşen bir ifadenin grup ifade kısmı nasıl alınır?

(Bu şimdi silinmiş yazının repost, ben bu durumda, value eşleşti expression kısmını elde edebilmek istiyorum, var value = "axx" maç için, var expression = /(a.)|(b.)|(c.)/; Verilen Hatalı, ama anlaşılır olarak çift olarak işaretlenmiş. Elde etmeye çalıştığım şey, normal ifadenin, eşleşen dizenin kısmı değil).

+0

Hmm neden üç farklı ifadeyle eşleşmeye çalışmıyor? –

+0

Hiçbir şey yapmanıza gerek yok, sadece hangi yakalama grubunun doldurulduğunu kontrol etmeniz gerekiyor. –

+0

@AdrienBrunelat çok uzun bir ifade kullanmak istiyorum, bu yüzden mümkün olduğunca çok sayıda döngüden kaçınmak istiyorum –

cevap

1
function getFirstMatchedGroupIndex(regex, test_str) { 
    var result = test_str.match(regex); 
    if (result) { 
     return result.splice(1).findIndex(x => x); 
    } 
} 

var reg = /(a.)|(b.)|(c.)/; 

getFirstMatchedGroupIndex(reg, "axx"); // 0 
getFirstMatchedGroupIndex(reg, "bxx"); // 1 
getFirstMatchedGroupIndex(reg, "cxx"); // 2 
getFirstMatchedGroupIndex(reg, "xxx"); // undefined 

Bu fonksiyon gerçeğinden yararlanır bir maç aşağıdaki girişleri ihtiva eden bir dizi döner match dize yöntemi durumunda:

  • birinci indeks olarak: Test dize bölümünün hangi düzenli ifadeyle eşleşti.
  • Aşağıdaki indeksler, bir grup eşleşmediğinde yakalanan grupların içeriğini (verilen normal ifadede soldan sağa sayılır) içerir, bunun yerine tanımsız kaydedilir.
+0

Üzgünüz, ama bu kodu nerden çalıştırıyorsunuz? x => x' ile ne demek istediğinizden emin değilim, dostum javascript –

+1

evet, JavaScript, yeni ES6 ok işlevlerini kullanıyorum, söz konusu fragman daha açık bir şekilde yazılmış olabilir findIndex (function (item) { ürünü geri vermek }); Daha eski bir tarayıcı kullanıyorsanız veya geriye dönük uyumlu olmak istiyorsanız, bu kodu kullanın. –

+0

oh, bu sadece bir parametre döndürme işlevine sahip olmak tuhaf görünebilir. Buna kimlik işlevi denir. Burada gerekli, çünkü findIndex, verilen işleve (burada: kimlik) aktarıldığında gerçek bir değer döndüren ilk öğenin dizinini döndürür. –

İlgili konular