Hay al menos cuatro formas. La mejor opción, que también debería ser la más rápida para el motor nativo RegEx, se coloca en la parte superior. jsperf.com está actualmente inactivo, de lo contrario, le proporcionaría estadísticas de rendimiento.
Actualización : por favor, encuentre las pruebas de rendimiento aquí y ejecútelas para contribuir con los resultados de su rendimiento. Los detalles de los resultados se darán más adelante.
1)
("this is foo bar".match(/o/g)||[]).length
//>2
2)
"this is foo bar".split("o").length-1
//>2
División no recomendada. Recurso hambriento. Asigna nuevas instancias de 'Array' para cada partida. No intente eso para un archivo> 100 MB a través de FileReader. En realidad, puede observar fácilmente el uso EXACTO de los recursos utilizando el generador de perfiles de Chrome opción de .
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)
buscando un solo personaje
var stringsearch = "o"
,str = "this is foo bar";
for(var i=count=0; i<str.length; count+=+(stringsearch===str[i++]));
//>count:2
Actualizar:
5)
mapeo y filtrado de elementos, no recomendado debido a la preasignación general de recursos en lugar de usar 'generadores' de 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
Compartir:
hice esta esencia , con actualmente 8 métodos de conteo de personajes, para que podamos agrupar y compartir nuestras ideas directamente, solo por diversión y quizás algunos puntos de referencia interesantes :)
https://gist.github.com/2757250