如何计算字符串中的字符串出现次数?
2022-08-29 22:28:58
如何计算特定字符串在另一个字符串中出现的次数。例如,这就是我在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'
正则表达式(global 的缩写)表示搜索整个字符串,而不仅仅是查找第一个匹配项。这匹配两次:g
is
var temp = "This is a string.";
var count = (temp.match(/is/g) || []).length;
console.log(count);
并且,如果没有匹配项,它将返回:0
var temp = "Hello World!";
var count = (temp.match(/is/g) || []).length;
console.log(count);
/** Function that count occurrences of a substring in a string;
* @param {String} string The string
* @param {String} subString The sub string to search for
* @param {Boolean} [allowOverlapping] Optional. (Default:false)
*
* @author Vitim.us https://gist.github.com/victornpb/7736865
* @see Unit Test https://jsfiddle.net/Victornpb/5axuh96u/
* @see https://stackoverflow.com/a/7924240/938822
*/
function occurrences(string, subString, allowOverlapping) {
string += "";
subString += "";
if (subString.length <= 0) return (string.length + 1);
var n = 0,
pos = 0,
step = allowOverlapping ? 1 : subString.length;
while (true) {
pos = string.indexOf(subString, pos);
if (pos >= 0) {
++n;
pos += step;
} else break;
}
return n;
}
occurrences("foofoofoo", "bar"); //0
occurrences("foofoofoo", "foo"); //3
occurrences("foofoofoo", "foofoo"); //1
occurrences("foofoofoo", "foofoo", true); //2
比赛:
foofoofoo
1 `----´
2 `----´
我做了一个基准测试,我的函数比gumbo发布的正则表达式匹配函数快10倍以上。在我的测试字符串中,长度为25个字符。字符“o”出现 2 次。我在Safari中执行了1 000 000次。
野生动物园 5.1
基准>总执行时间:5617 毫秒(正则表达式)
基准测试>总执行时间:881 毫秒(我的函数快 6.4 倍)
火狐 4
基准测试>总执行时间:8547 毫秒 (Rexexp)
基准测试>总执行时间:634毫秒(我的函数快13.5倍)
编辑:我所做的更改
缓存子字符串长度
向字符串添加了类型转换。
添加了可选的“允许重叠”参数
修复了 “” 空子字符串大小写的正确输出。