在 Javascript 中计算字符串中字符的出现次数
2022-08-29 22:31:57
我需要计算字符串中某个字符的出现次数。
例如,假设我的字符串包含:
var mainStr = "str1,str2,str3,str4";
我想找到逗号字符的计数,即3。以及沿逗号拆分后单个字符串的计数,即 4。,
我还需要验证每个字符串(即str1或str2或str3或str4)不应超过15个字符。
我需要计算字符串中某个字符的出现次数。
例如,假设我的字符串包含:
var mainStr = "str1,str2,str3,str4";
我想找到逗号字符的计数,即3。以及沿逗号拆分后单个字符串的计数,即 4。,
我还需要验证每个字符串(即str1或str2或str3或str4)不应超过15个字符。
我已经更新了这个答案。我喜欢更好地使用匹配的想法,但它更慢:
console.log(("str1,str2,str3,str4".match(/,/g) || []).length); //logs 3
console.log(("str1,str2,str3,str4".match(new RegExp("str", "g")) || []).length); //logs 4
如果您事先知道要搜索的内容,请使用正则表达式文本,如果不知道,则可以使用构造函数,并将标志作为参数传入。RegExp
g
match
返回没有结果,因此null
|| []
我在2009年做出的原始答案如下。它不必要地创建数组,但使用拆分更快(截至 2014 年 9 月)。我很矛盾,如果我真的需要速度,毫无疑问我会使用拆分,但我更喜欢使用匹配。
旧答案(从2009年开始):
如果你正在寻找逗号:
(mainStr.split(",").length - 1) //3
如果你正在寻找 str
(mainStr.split("str").length - 1) //4
无论是在@Lo的答案中,还是在我自己愚蠢的性能测试中,至少在Chrome中,分裂的速度都领先了,但再次创建额外的数组似乎并不理智。
至少有五种方法。最佳选项,也应该是最快的(由于本机正则表达式引擎)放在顶部。
("this is foo bar".match(/o/g)||[]).length;
// returns 2
"this is foo bar".split("o").length - 1;
// returns 2
不建议拆分,因为它需要大量资源。它为每个匹配项分配新的“Array”实例。不要通过FileReader尝试>100MB文件。您可以使用 Chrome 的 profiler 选项来观察确切的资源使用情况。
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的“生成器”:
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
共享:我用目前8种字符计数方法制作了这个要点,因此我们可以直接汇集和分享我们的想法 - 只是为了好玩,也许还有一些有趣的基准:)