Как посчитать вхождение строки в строку? - PullRequest
514 голосов
/ 24 октября 2010

Как подсчитать, сколько раз конкретная строка встречается в другой строке. Например, это то, что я пытаюсь сделать в Javascript:

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

Ответы [ 28 ]

1 голос
/ 08 июня 2016

Простая версия без регулярных выражений:

var temp = "This is a string.";

var count = (temp.split('is').length - 1);

alert(count);
0 голосов
/ 20 июня 2019

наткнулся на это сообщение.

let str = 'As sly as a fox, as strong as an ox';

let target = 'as'; // let's look for it

let pos = 0;
while (true) {
  let foundPos = str.indexOf(target, pos);
  if (foundPos == -1) break;

  alert( `Found at ${foundPos}` );
  pos = foundPos + 1; // continue the search from the next position
}

Тот же алгоритм можно изложить короче:

let str = "As sly as a fox, as strong as an ox";
let target = "as";

let pos = -1;
while ((pos = str.indexOf(target, pos + 1)) != -1) {
  alert( pos );
}
0 голосов
/ 14 апреля 2019

Это решение основано на методе .replace(), который принимает RegEx в качестве первого параметра и функцию в качестве второго параметра , которую мы можем использовать в качестве замыкания для увеличения счетчика ...

/**
 * Return the frequency of a substring in a string
 * @param {string} string - The string.
 * @param {string} string - The substring to count.
 * @returns {number} number - The frequency.
 * 
 * @author Drozerah https://gist.github.com/Drozerah/2b8e08d28413d66c3e63d7fce80994ce
 * @see https://stackoverflow.com/a/55670859/9370788
 */
const subStringCounter = (string, subString) => {

    let count = 0
    string.replace(new RegExp(subString, 'gi'), () => count++)
    return count
}

Использование

subStringCounter("foofoofoo", "bar"); //0

subStringCounter("foofoofoo", "foo"); //3
0 голосов
/ 18 апреля 2018

Немного поздно, но при условии, что у нас есть следующая строка:

var temp = "This is a string.";

Сначала мы разделим все, что вы хотите, чтобы соответствовать, это вернет массив строк.

var array = temp.split("is");

Затем мы получаем его длину и вычитаем 1, так как split по умолчанию равен массиву размера 1 и, как следствие, увеличивает его размер при каждом обнаружении вхождения.

var occurrenceCount = array.length - 1;
alert(occurrenceCount); //should output '2'

Вы также можете сделать все это в одну строку следующим образом:

alert("This is a string.".split("is").length - 1); //should output '2'

Надеюсь, это поможет: D

0 голосов
/ 01 марта 2018

var s = "1";replaced word
var a = "HRA"; //have to replace 
var str = document.getElementById("test").innerHTML;
var count = str.split(a).length - 1;
for (var i = 0; i < count; i++) {
    var s = "1";
    var a = "HRA";
    var str = document.getElementById("test").innerHTML;
    var res = str.replace(a, s);
    document.getElementById("test").innerHTML = res;
}

<input " type="button" id="Btn_Validate" value="Validate" class="btn btn-info" />
<div class="textarea"  id="test" contenteditable="true">HRABHRA</div>
0 голосов
/ 09 февраля 2018

var countInstances = function(body, target) {
  var globalcounter = 0;
  var concatstring  = '';
  for(var i=0,j=target.length;i<body.length;i++){
    concatstring = body.substring(i-1,j);
    
    if(concatstring === target){
       globalcounter += 1;
       concatstring = '';
    }
  }
  
  
  return globalcounter;
 
};

console.log(   countInstances('abcabc', 'abc')   ); // ==> 2
console.log(   countInstances('ababa', 'aba')   ); // ==> 2
console.log(   countInstances('aaabbb', 'ab')   ); // ==> 1
0 голосов
/ 19 октября 2017

Ответ для Леандро Батисты: просто проблема с выражением регулярного выражения.

 "use strict";
 var dataFromDB = "testal";
 
  $('input[name="tbInput"]').on("change",function(){
	var charToTest = $(this).val();
	var howManyChars = charToTest.length;
	var nrMatches = 0;
	if(howManyChars !== 0){
		charToTest = charToTest.charAt(0);
		var regexp = new RegExp(charToTest,'gi');
		var arrMatches = dataFromDB.match(regexp);
		nrMatches = arrMatches ? arrMatches.length : 0;
	}
		$('#result').html(nrMatches.toString());

  });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="main">
What do you wanna count <input type="text" name="tbInput" value=""><br />
Number of occurences = <span id="result">0</span>
</div>
0 голосов
/ 14 февраля 2013

Попробуйте это:

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