2011-03-26 17 views
9

Eğer regex ile string.match() kullanırsam, eşleşen dizeyi geri alırım, ancak dizini eşleşmenin oluştuğu orijinal dizeye geri döndürmezim. String.search() işlevini kullanırsam, dizini alırım, ancak dizenin eşleşen bölümünün ne kadar uzun olduğunu bilmiyorum. Her ikisini de yapmanın bir yolu var, bu yüzden orijinal dizideki endeksini alabilir miyim?Düzenli ifade arama/eşlemenin son dizinini bulma

Sanırım, aynı sonuçları döndürdüğü varsayımıyla, ancak farklı bir şekilde kabul ettiğimden ötekini (aşağıdan) sonra yapabilirim, ama bu çirkin ve verimsiz gibi gözüküyor ve daha iyi bir yol olduğundan şüpheleniyorum. Alternatif olarak

var str = "Fear leads to anger. Anger leads to hate. Hate leads to suffering"; 

var rgx = /l[aeiou]+d/i; 
var match = str.match(rgx); 
if (match && match[0]) { 
    var i = str.search(rgx); 
    console.log ("end of match is at index " + (i+match[0].length)); 
    } 

cevap

10

.match aşağıdaki özelliklere sahip yeni bir dizi döner:

endeksi özelliği tam dizge içinde eşleşen alt arasında konumuna ayarlanmıştır S.

Girdi özellik,

olarak ayarlanır. length özelliği n + 1 olarak ayarlanır.

0 özelliği (. I. E S kısmı i her şeyi kapsayan ofset ve e özel ofset arasında) eşleşen substring ayarlanır.

Her bir tamsayı için i> 0 ve i < = n gibi bir durumda, ToString (i) adlı özelliği r'nin yakalama dizisinin ith öğesine ayarlayın. http://bclary.com/2004/11/07/#a-15.10.6.2

match.index itibaren

neye ihtiyacınız sağlayacaktır.

+0

enteresan .... Bu dizinin dizine Chrome'u eklediğini fark ettim (bir/g değeriniz olmadığını varsayarak ... bu sayede birden fazla eşleşme olacak ve tek bir dizinin olması mantıklı olmayacaktır) . Bu tüm makul tarayıcılar tarafından destekleniyorsa (...?), Bu mükemmel. – rob

0

:

if (match && match[0]) { 
    console.log ("end of match is at index " + (str.indexOf(match[0]) + match[0].length)); 
} 
+1

Sanırım haklısınız, eğer [0] maçında bir indexOf yaparsanız, her zaman ilk olay olacaktır. Söylemek istediğin tuhaf bir ifade yoksa ... ... sana ikinci bir dize verirsin ... – rob