我该如何在一个字符串中统计另一个特定字符串出现的次数?例如,我想在Javascript中实现以下操作:
var temp = "This is a string.";
alert(temp.count("is")); //should output '2'
我该如何在一个字符串中统计另一个特定字符串出现的次数?例如,我想在Javascript中实现以下操作:
var temp = "This is a string.";
alert(temp.count("is")); //should output '2'
ES2020提供了一个新的MatchAll方法,可能在这种特定情况下会有用。
在这里我们创建一个新的RegExp,请确保将'g'传递到函数中。
使用Array.from转换结果并计算长度,该长度返回2,与原始请求者的期望输出相同。
let strToCheck = RegExp('is', 'g')
let matchesReg = "This is a string.".matchAll(strToCheck)
console.log(Array.from(matchesReg).length) // 2
function substrCount( str, x ) {
let count = -1, pos = 0;
do {
pos = str.indexOf( x, pos ) + 1;
count++;
} while( pos > 0 );
return count;
}
添加了这个优化:
这可能是这里最快的实现,但如果您用“pos+=searchFor.length”替换“++pos”,它会更快- hanshenrik
function occurrences(str_, subStr) {
let occurence_count = 0
let pos = -subStr.length
while ((pos = str_.indexOf(subStr, pos + subStr.length)) > -1) {
occurence_count++
}
return occurence_count
}
String.prototype.occurrencesOf = function(s, i) {
return (n => (n === -1) ? 0 : 1 + this.occurrencesOf(s, n + 1))(this.indexOf(s, (i || 0)));
};
这是我的解决方案,在2022年,使用map()和filter():
string = "Xanthous: A person with yellow hair. Her hair was very xanthous in colour."
count = string.split('').map((e,i) => { if(e === 'e') return i;}).filter(Boolean).length
只是为了使用这些函数而玩乐。该示例计算我的字符串中“e”的数量。
这与使用match()函数相同:
(string.match(/e/g)||[]).length
或者简单地使用split()函数:
string.split('e').length - 1
我认为最好使用match(),因为它消耗的资源较少!我的回答只是为了好玩,并展示解决这个问题的许多可能性。
var search_value = "This is a dummy sentence!";
var letter = 'a'; /*Can take any letter, have put in a var if anyone wants to use this variable dynamically*/
letter = letter && "string" === typeof letter ? letter : "";
var count;
for (var i = count = 0; i < search_value.length; count += (search_value[i++] == letter));
console.log(count);
我不确定这是否是最快的解决方案,但我喜欢它的简单性和不使用正则表达式(我只是不喜欢使用它们!)
let count = s.length - s.replace(/is/g, "").length;
这是我的解决方案。希望能对某些人有所帮助。
const countOccurence = (string, char) => {
const chars = string.match(new RegExp(char, 'g')).length
return chars;
}
var mystring = 'This is the lorel ipsum text';
var mycharArray = mystring.split('');
var opArr = [];
for(let i=0;i<mycharArray.length;i++){
if(mycharArray[i]=='i'){//match the character you want to match
opArr.push(i);
}}
console.log(opArr); // it will return matching index position
console.log(opArr.length); // it will return length
第二次迭代时减少迭代次数(仅在子字符串的第一个字母匹配时)但仍使用2个循环:
function findSubstringOccurrences(str, word) {
let occurrences = 0;
for(let i=0; i<str.length; i++){
if(word[0] === str[i]){ // to make it faster and iterate less
for(let j=0; j<word.length; j++){
if(str[i+j] !== word[j]) break;
if(j === word.length - 1) occurrences++;
}
}
}
return occurrences;
}
console.log(findSubstringOccurrences("jdlfkfomgkdjfomglo", "omg"));