Có ít nhất bốn cách. Tùy chọn tốt nhất, cũng phải là công cụ RegEx gốc - nhanh nhất - được đặt ở trên cùng. jsperf.com hiện đang ngừng hoạt động, nếu không tôi sẽ cung cấp cho bạn số liệu thống kê hiệu suất.
Cập nhật : Xin vui lòng, tìm các bài kiểm tra hiệu suất ở đây và tự chạy chúng, để đóng góp kết quả hiệu suất của bạn. Các chi tiết cụ thể của kết quả sẽ được cung cấp sau.
1.
("this is foo bar".match(/o/g)||[]).length
//>2
2.
"this is foo bar".split("o").length-1
//>2
chia không khuyến khích. Tài nguyên đói. Phân bổ các phiên bản mới của 'Mảng' cho mỗi trận đấu. Đừng thử điều đó đối với tệp> 100MB qua FileReader. Bạn thực sự có thể dễ dàng quan sát việc sử dụng tài nguyên CHÍNH XÁC bằng tùy chọn trình lược tả của 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.
tìm kiếm một nhân vật
var stringsearch = "o"
,str = "this is foo bar";
for(var i=count=0; i<str.length; count+=+(stringsearch===str[i++]));
//>count:2
Cập nhật:
5.
ánh xạ phần tử và lọc, không được đề xuất do sự phân bổ tài nguyên tổng thể của nó thay vì sử dụng 'máy phát điện' của Pythonia
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
Chia sẻ:
Tôi đã thực hiện ý chính này , với 8 phương pháp đếm nhân vật hiện tại, vì vậy chúng tôi có thể trực tiếp tổng hợp và chia sẻ ý tưởng của mình - chỉ để cho vui, và có lẽ một số điểm chuẩn thú vị :)
https://gist.github.com/2757250