¿Cómo contar las apariciones de cadenas en una cadena?

¿Cómo puedo contar el número de veces que una cadena determinada aparece en otra cadena? Por ejemplo, esto es lo que estoy tratando de hacer en Javascript:

var temp = "This is a string.";
alert(temp.count("is")); //should output '2'
Solución

La g de la expresión regular (abreviatura de global) indica que se debe buscar en toda la cadena en lugar de encontrar sólo la primera ocurrencia. Esto coincide con "es" dos veces:

var temp = "Esto es una cadena.";
var count = (temp.match(/is/g) || []).length;
console.log(count);

Y, si no hay coincidencias, devuelve 0:

var temp = "¡Hola Mundo!";
var count = (temp.match(/is/g) || []).length;
console.log(count);
Comentarios (17)
function countInstances(string, word) {
   return string.split(word).length - 1;
}
Comentarios (10)

Puede utilizar match para definir dicha función:

String.prototype.count = function(search) {
    var m = this.match(new RegExp(search.toString().replace(/(?=[.\\+*?[^\]$(){}\|])/g, "\\"), "g"));
    return m ? m.length:0;
}
Comentarios (2)