推荐用 split() + length:字符串按目标字符分割后数组长度减1即为出现次数;需注意空字符串不能作分割参数,忽略大小写时应先统一大小写。

最简单直接的方法是用 split() 配合 length:字符串按目标字符分割,数组长度减 1 就是出现次数。
方法一:split() + length(推荐,简洁可靠)
适用于统计单个字符或固定子串,不区分大小写时需先统一转换。
- let count = str.split('a').length - 1;
- 注意:空字符串
''不能作为split的参数,会报错 - 若要忽略大小写,先转成同一大小写:
str.toLowerCase().split('a').length - 1
方法二:for 循环遍历(可控性强,适合复杂逻辑)
适合需要额外判断(比如只统计字母中的某字符、跳过引号内内容等)的场景。
- let count = 0;
for (let i = 0; i if (str[i] === 'a') count++;
} - 支持精确控制——比如跳过转义字符、限定位置范围、结合正则预处理等
方法三:match() + 正则表达式(适合模式匹配)
用 match() 配合全局正则,返回匹配数组,再取 length;注意匹配不到时返回 null。
立即学习“Java免费学习笔记(深入)”;
- let matches = str.match(/a/g);
let count = matches ? matches.length : 0; - 支持正则能力:如统计连续多个 a:
/a+/g,或排除某些上下文 - 特殊字符(如
.、*、?)需转义,例如统计点号:/\./g
小提醒:避开常见坑
- 别用
indexOf手动循环又忘了更新起始位置,容易漏统计 -
includes()只能判断存不存在,不能计数 - 统计中文字符、emoji 或 Unicode 组合字符(如带声调的字)时,确保字符串编码和索引处理正确,必要时用
Array.from(str)替代str[i]


















