Я полагаю, что вы найдете следующее решение очень коротким, очень быстрым, способным работать с очень длинными строками, способным поддерживать поиск по нескольким символам, защищенным от ошибок и способным обрабатывать поиск пустых строк.
function substring_count(source_str, search_str, index) {
source_str += "", search_str += "";
var count = -1, index_inc = Math.max(search_str.length, 1);
index = (+index || 0) - index_inc;
do {
++count;
index = source_str.indexOf(search_str, index + index_inc);
} while (~index);
return count;
}
Пример использования:
console.log(substring_count("Lorem ipsum dolar un sit amet.", "m "))
function substring_count(source_str, search_str, index) {
source_str += "", search_str += "";
var count = -1, index_inc = Math.max(search_str.length, 1);
index = (+index || 0) - index_inc;
do {
++count;
index = source_str.indexOf(search_str, index + index_inc);
} while (~index);
return count;
}
Приведенный выше код исправляет главную ошибку производительности в Jakub Wawszczyk, из-за которой код продолжает искать совпадения даже после того, как indexOf говорит, что его нет, и его версия не работает, потому что он забыл указать входные параметры функции.