JS统计字符串单词频率的技巧
2026-03-27 15:48:46
0浏览
收藏
本文详解了如何利用JavaScript正则表达式(/[a-z0-9]+/gi)结合match()与reduce()高效统计字符串中单词出现频次——先精准提取字母数字组合的单词、自动忽略大小写与标点,再通过健壮的空值防护和小写归一化确保统计准确性,最终生成清晰的{word: count}计数对象;代码简洁可复用,还支持扩展停用词过滤与Map替代方案,是文本分析与数据预处理中实用又易懂的核心技巧。

可以用正则表达式配合 match() 和 reduce() 快速统计单词频次,关键是正确提取“单词”(通常指连续的字母数字字符,忽略大小写和标点)。
提取所有单词(忽略大小写和标点)
使用正则 /[a-z0-9]+/gi 匹配至少一个字母或数字组成的子串,g 全局匹配,i 忽略大小写。这样能跳过空格、标点、换行等非单词字符。
例如:
"Hello, world! Hello JavaScript123." → ["Hello", "world", "Hello", "JavaScript123"]转为小写统一计数
为避免 "Hello" 和 "hello" 被视为不同单词,建议在提取后统一转小写。可在 match() 后链式调用 map(w => w.toLowerCase()),或在 reduce 中处理。
- 直接在匹配后转换:
str.match(/[a-z0-9]+/gi)?.map(w => w.toLowerCase()) || [] - 空值防护很重要:
match()在无匹配时返回null,需提供默认空数组
用 reduce 统计频次
遍历单词数组,用对象累积计数:
const freq = words.reduce((acc, word) => {
acc[word] = (acc[word] || 0) + 1;
return acc;
}, {});
结果是形如 { hello: 2, world: 1, javascript123: 1 } 的对象。
- 也可用
Map替代普通对象,更安全(避免原型污染) - 若需按频次排序,后续可对
Object.entries(freq)使用sort()
完整示例函数
封装成可复用函数:
function wordFrequency(str) {
const words = str.match(/[a-z0-9]+/gi)?.map(w => w.toLowerCase()) || [];
return words.reduce((acc, word) => {
acc[word] = (acc[word] || 0) + 1;
return acc;
}, {});
}
// wordFrequency("Hi there! Hi again.") → { hi: 2, there: 1, again: 1 }
如需排除停用词(如 "the", "and"),可在 map 前加 filter 步骤。
今天关于《JS统计字符串单词频率的技巧》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!
微信小程序图表交互技巧与实现方法
- 上一篇
- 微信小程序图表交互技巧与实现方法
- 下一篇
- PDF按页数拆分教程及工具推荐
查看更多
最新文章
-
- 文章 · 前端 | 1天前 | js语法教程
- JSSet集合使用与去重技巧详解
- 350浏览 收藏
-
- 文章 · 前端 | 1天前 |
- HTML5离线缓存清除方法大全
- 462浏览 收藏
-
- 文章 · 前端 | 1天前 |
- HTML编码如何避免乱码问题
- 235浏览 收藏
-
- 文章 · 前端 | 1天前 |
- HTMLaddress标签使用方法详解
- 309浏览 收藏
-
- 文章 · 前端 | 1天前 |
- 发布订阅模式消息队列原理与实现解析
- 135浏览 收藏

