Подсчет количества раз, когда шаблон появляется в строке - PullRequest
2 голосов
/ 03 ноября 2011

Каков наилучший метод подсчета числа раз, когда строка появляется в строке с использованием JS?

Например:

count("fat math cat", "at") returns 3

Ответы [ 6 ]

6 голосов
/ 03 ноября 2011

Используйте регулярное выражение, а затем из найденного массива можно найти количество совпадений.Это наивный подход с использованием регулярных выражений.

'fat cat'.match(/at/g).length

Для защиты от случаев, когда строка не совпадает, используйте:

( 'fat cat'.match(/at/g) || [] ).length
1 голос
/ 03 ноября 2011

Здесь:

function count( string, substring ) {
    var result = string.match( RegExp( '(' + substring + ')', 'g' ) ); 
    return result ? result.length : 0;
}
0 голосов
/ 15 сентября 2014

Вы также можете использовать split:

function getCount(str,d) {
    return str.split(d).length - 1;
}
getCount("fat math cat", "at"); // return 3
0 голосов
/ 03 ноября 2011
function count(str,ma){
 var a = new RegExp(ma,'g'); // Create a RegExp that searches for the text ma globally
 return str.match(a).length; //Return the length of the array of matches
}

Тогда назовите это так, как вы это сделали в своем примере.count('fat math cat','at');

0 голосов
/ 03 ноября 2011

Не используйте это, это слишком сложно:

function count(sample, searchTerm) {
  if(sample == null || searchTerm == null) {
    return 0;
  }

  if(sample.indexOf(searchTerm) == -1) {
    return 0;
  }

  return count(sample.substring(sample.indexOf(searchTerm)+searchTerm.length), searchTerm)+1;
}
0 голосов
/ 03 ноября 2011

Можно использовать indexOf в цикле:

function count(haystack, needle) {
    var count = 0;
    var idx = -1;
    haystack.indexOf(needle, idx + 1);
    while (idx != -1) {
        count++;
        idx = haystack.indexOf(needle, idx + 1);
    }
    return count;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...