如何统计字符串中包含的数组元素出现总次数?
统计字符串中数组元素的总出现次数
要实现你需要的功能,核心思路是遍历数组中的每个关键词,统计每个关键词在字符串中的子串出现次数,最后累加所有次数。以下是具体实现:
代码实现
// 转义正则特殊字符,避免关键词包含正则元字符时出错 function escapeRegExp(str) { return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); } let array = [ "foo", "bar" ]; function funnyFunction(string) { let totalCount = 0; // 遍历每个关键词 array.forEach(keyword => { const escapedKey = escapeRegExp(keyword); // 创建全局匹配的正则表达式 const regex = new RegExp(escapedKey, 'g'); // 获取所有匹配结果,无匹配则返回null const matches = string.match(regex); // 累加次数,无匹配时加0 totalCount += matches ? matches.length : 0; }); return totalCount; } // 测试示例 console.log(funnyFunction("Have you ever wondered why they use foo in programming examples? And sometimes they use foo and bar when there's an amount of something. And I still don't know what foobar even means.")); // 输出:5
关键说明
- 正则转义:如果关键词包含
.、*、?这类正则特殊字符,必须先转义,否则会导致匹配逻辑出错(比如关键词"foo.bar"会被正则解析为匹配"foo"后接任意字符再"bar")。 - 全局匹配:使用
g修饰符让正则遍历整个字符串,找到所有符合的子串,match()返回的数组长度就是该关键词的出现次数。 - 边界处理:当关键词在字符串中没有匹配时,
match()返回null,这里用三元运算符处理为0,避免累加时出错。
验证场景
调用funnyFunction("foo bar")和funnyFunction("foobar")都会返回2,完全符合你的需求。
内容的提问来源于stack exchange,提问作者sophb.chan
相关产品推荐
相关产品推荐

