至少有五种方法。最好的选项,也应该是最快的(由于本机 RegEx 引擎)放在顶部。
方法一
("this is foo bar".match(/o/g)||[]).length;
// returns 2
方法二
"this is foo bar".split("o").length - 1;
// returns 2
不推荐拆分,因为它需要大量资源。它为每个匹配分配新的 'Array' 实例。不要尝试通过 FileReader 获取 >100MB 的文件。您可以使用 Chrome 的分析器 选项观察确切的资源使用情况。
方法3
var stringsearch = "o"
,str = "this is foo bar";
for(var count=-1,index=-2; index != -1; count++,index=str.indexOf(stringsearch,index+1) );
// returns 2
方法四
搜索单个字符
var stringsearch = "o"
,str = "this is foo bar";
for(var i=count=0; i<str.length; count+=+(stringsearch===str[i++]));
// returns 2
方法五
元素映射和过滤。不建议这样做,因为它的整体资源预分配而不是使用 Pythonian 'generators':
var str = "this is foo bar"
str.split('').map( function(e,i){ if(e === 'o') return i;} )
.filter(Boolean)
//>[9, 10]
[9, 10].length
// returns 2
分享:
我做了这个gist,目前有 8 种字符计数方法,所以我们可以直接汇集和分享我们的想法 - 只是为了好玩,也许还有一些有趣的基准:)