Есть как минимум четыре способа. Лучший вариант, который также должен быть самым быстрым - благодаря собственному движку RegEx, - расположен сверху. jsperf.com в настоящее время не работает, в противном случае я бы предоставил вам статистику производительности.
Обновление : пожалуйста, найдите здесь тесты производительностии сами запустите их, чтобы улучшить результаты своей работы. Специфика результатов будет дана позже.
1.
("this is foo bar".match(/o/g)||[]).length
//>2
2.
"this is foo bar".split("o").length-1
//>2
сплит не рекомендуется. Ресурс голоден. Выделяет новые экземпляры Array для каждого совпадения. Не пытайтесь сделать это для> 100 МБ файла через FileReader. На самом деле вы можете легко наблюдать за использованием ресурса EXACT, используя опцию профилирования 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.
поиск одного символа
var stringsearch = "o"
,str = "this is foo bar";
for(var i=count=0; i<str.length; count+=+(stringsearch===str[i++]));
//>count:2
Обновить:
5.
сопоставление и фильтрация элементов, не рекомендуется из-за общего предварительного распределения ресурсов, а не из-за использования 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
Поделиться:
Я сделал эту суть , с в настоящее время 8 методов подсчета символов, так что мы можем напрямую объединять и делиться своими идеями - просто для удовольствия, и, возможно, некоторые интересные тесты :)
https://gist.github.com/2757250