En az dört yol var. Yerel RegEx motorunun en hızlı olması gereken en iyi seçenek en üste yerleştirilmiştir. jsperf.com şu anda kapalı, aksi takdirde size performans istatistikleri sunacağım.
Güncelleme : Lütfen,performans sonuçlarınıza katkıda bulunmak için performanstestlerini burada bulunve kendiniz çalıştırın. Sonuçların detayları daha sonra verilecektir.
1.
("this is foo bar".match(/o/g)||[]).length
//>2
2.
"this is foo bar".split("o").length-1
//>2
split tavsiye edilmez. Kaynak aç. Her maç için yeni 'Dizi' örnekleri atar. FileReader üzerinden 100 MB'tan büyük bir dosya için bunu denemeyin. Chrome'un profil oluşturucu seçeneğini kullanarak EXACT kaynak kullanımını kolayca gözlemleyebilirsiniz .
3.
var stringsearch = "o"
,str = "this is foo bar";
for(var count=-1,index=-2; index != -1; count++,index=str.indexOf(stringsearch,index+1) );
//>count:2
4.
tek bir karakter aramak
var stringsearch = "o"
,str = "this is foo bar";
for(var i=count=0; i<str.length; count+=+(stringsearch===str[i++]));
//>count:2
Güncelleme:
5.
eleman eşleme ve filtreleme, Pythonian 'jeneratörleri' kullanmak yerine genel kaynak ön yerleşimi nedeniyle önerilmez
var str = "this is foo bar"
str.split('').map( function(e,i){ if(e === 'o') return i;} )
.filter(Boolean)
//>[9, 10]
[9, 10].length
//>2
Paylaş:
Bunu yapan özünü doğrudan havuzu ve fikirlerimizi paylaşabilmeleri, karakter-sayma şu anda 8 yöntemlerle, - sadece eğlence için ve belki bazı ilginç kriterler :)
https://gist.github.com/2757250