字符串字符与单词统计问题:代码优化及'it'匹配实现
问题解决:字符与单词的次数统计优化
核心问题分析
- 原代码冗余:靠多个独立数组和重复条件判断实现统计,扩展性极差,新增统计项要改大量代码。
- 单词
it统计失败:原逻辑只遍历单个字符,没法匹配两个字符组成的完整单词,而且没考虑单词边界,就算能匹配也会误抓sit、odit里的it片段。
简洁实现方案
用正则表达式统一处理字符和单词匹配,结合对象存储统计结果,代码简洁还易扩展:
const text = "Lorem ipsum dolor sit amet consectetur adipisicing elit. Culpa, perspiciatis? Reiciendis, facere nobis libero officiis labore sit, deserunt maiores perferendis tempore quas neque odit. Quasi culpa totam aspernatur deserunt nobis."; // 定义目标项和对应正则:单个字符用全局匹配,单词用单词边界确保匹配完整单词 const targetRegexMap = { 'a': /a/g, 'i': /i/g, 'it': /\bit\b/g }; const countResult = {}; // 遍历每个目标项,执行匹配并统计次数 for (const [item, regex] of Object.entries(targetRegexMap)) { const matchList = text.match(regex); countResult[item] = matchList ? matchList.length : 0; } // 输出结果 console.log(`字符'a'的出现次数:${countResult.a}`); // 13 console.log(`字符'i'的出现次数:${countResult.i}`); // 24 console.log(`单词'it'的出现次数:${countResult.it}`); // 0(原文本无独立的it单词)
代码说明
- 正则设计:
- 单个字符(如
a、i):用/字符/g全局匹配所有出现的该字符。 - 完整单词(如
it):用/\bit\b/g,\b是单词边界,确保只匹配独立的it单词,不会误匹配其他单词里的it片段。
- 单个字符(如
- 结果存储:用对象
countResult统一存所有统计项的次数,避免多个独立变量的冗余。 - 匹配逻辑:
text.match(regex)返回所有匹配结果的数组,没匹配到就返回null,用三元表达式处理空值情况。
替代方案(非正则)
如果不想用正则,也可以拆分逻辑实现:
const text = "Lorem ipsum dolor sit amet consectetur adipisicing elit. Culpa, perspiciatis? Reiciendis, facere nobis libero officiis labore sit, deserunt maiores perferendis tempore quas neque odit. Quasi culpa totam aspernatur deserunt nobis."; // 统计单个字符 const countA = text.split('a').length - 1; const countI = text.split('i').length - 1; // 统计完整单词it:先清理标点,拆分单词数组后过滤 const cleanText = text.replace(/[.,?]/g, ''); const words = cleanText.split(' '); const countIt = words.filter(word => word === 'it').length; console.log(`字符'a':${countA}`); //13 console.log(`字符'i':${countI}`); //24 console.log(`单词'it':${countIt}`); //0
内容的提问来源于stack exchange,提问作者Fajri
相关产品推荐
相关产品推荐

