Setidaknya ada empat cara. Pilihan terbaik, yang seharusnya menjadi yang tercepat untuk mesin RegEx asli -, ditempatkan di bagian atas. jsperf.com saat ini sedang down, kalau tidak saya akan memberikan Anda statistik kinerja.
Pembaruan : Tolong, cari tes kinerja di sini , dan jalankan sendiri, sehingga dapat berkontribusi hasil kinerja Anda. Spesifikasi hasil akan diberikan nanti.
1.
("this is foo bar".match(/o/g)||[]).length
//>2
2.
"this is foo bar".split("o").length-1
//>2
perpecahan tidak direkomendasikan. Sumberdaya lapar. Alokasikan instance 'Array' baru untuk setiap pertandingan. Jangan coba itu untuk file> 100MB melalui FileReader. Anda sebenarnya dapat dengan mudah mengamati penggunaan sumber daya EXACT menggunakan opsi profiler Chrome .
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.
mencari satu karakter
var stringsearch = "o"
,str = "this is foo bar";
for(var i=count=0; i<str.length; count+=+(stringsearch===str[i++]));
//>count:2
Memperbarui:
5.
pemetaan elemen dan penyaringan, tidak direkomendasikan karena preallokasi sumber daya keseluruhan daripada menggunakan 'generator' Pythonian
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
Bagikan:
Saya membuat intisari ini , dengan 8 metode penghitungan karakter saat ini, sehingga kami dapat langsung menyatukan dan berbagi ide-ide kami - hanya untuk bersenang-senang, dan mungkin beberapa tolok ukur yang menarik :)
https://gist.github.com/2757250