Existem pelo menos quatro maneiras. A melhor opção, que também deve ser a mais rápida para o mecanismo RegEx nativo -, é colocada no topo. O jsperf.com está desativado no momento, caso contrário, eu forneceria estatísticas de desempenho.
Atualização : encontre aqui os testes de desempenhoe execute-os, para contribuir com seus resultados de desempenho. As especificidades dos resultados serão fornecidas posteriormente.
1
("this is foo bar".match(/o/g)||[]).length
//>2
2)
"this is foo bar".split("o").length-1
//>2
divisão não recomendada. Com fome de recursos. Aloca novas instâncias de 'Matriz' para cada correspondência. Não tente isso para um arquivo> 100 MB via FileReader. Você pode observar facilmente o uso EXATO dos recursos usando a opção de criação de perfil do 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)
procurando um único caractere
var stringsearch = "o"
,str = "this is foo bar";
for(var i=count=0; i<str.length; count+=+(stringsearch===str[i++]));
//>count:2
Atualizar:
5)
mapeamento e filtragem de elementos, não recomendado devido à sua pré-localização geral de recursos, em vez de usar 'geradores' do Python
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
Compartilhe:
Eu criei essa essência , com atualmente 8 métodos de contagem de caracteres, para que possamos compartilhar e compartilhar nossas idéias diretamente - apenas por diversão, e talvez por algumas referências interessantes :)
https://gist.github.com/2757250