在前后端开发中,我们常常需要检测一段用户输入的文本是否包含了某个关键词集合里的任意一个词。比如评论过滤、搜索联想、命令解析等场景都会用到。把关键词放在数组里,再对用户输入做匹配,是比较通用的处理方式。

使用循环与 includes 方法
最简单直观的思路是遍历关键词数组,依次用字符串的 includes 方法检查输入中是否含有该项。只要找到一个就返回 true。
// 关键词数组
const keywords = ['优惠', '免费', '领取'];
// 用户输入
const userInput = '点击这里免费领取奖品';
// 判断是否包含任意关键词
function hasAnyKeyword(input, keywordList) {
for (let i = 0; i < keywordList.length; i++) {
if (input.includes(keywordList[i])) {
return true;
}
}
return false;
}
console.log(hasAnyKeyword(userInput, keywords)); // 输出 true
使用 some 方法简化代码
数组的 some 方法可以在遇到第一个满足条件的元素时停止遍历,语义更清晰,也少了手动写循环的负担。
const keywords = ['优惠', '免费', '领取'];
const userInput = '这个商品有优惠吗';
const matched = keywords.some(function (word) {
return userInput.includes(word);
});
console.log(matched); // 输出 true
使用正则表达式一次性匹配
如果关键词数量较多,反复调用 includes 会有一定性能损耗。可以把数组拼成正则表达式,用一次匹配完成检测。
const keywords = ['优惠', '免费', '领取'];
const userInput = '活动期间免费包邮';
// 将关键词用竖线连接,注意特殊字符需转义
const pattern = new RegExp(keywords.map(function (w) {
return w.replace(/[.*+?^${}()|[]\]/g, '\$&');
}).join('|'));
console.log(pattern.test(userInput)); // 输出 true
不同方案的对比
| 方案 | 可读性 | 性能 | 适用场景 |
|---|---|---|---|
| 循环 + includes | 较好 | 一般 | 关键词少、逻辑简单 |
| some 方法 | 很好 | 一般 | 代码简洁优先 |
| 正则表达式 | 一般 | 较好 | 关键词多、高频调用 |
小结
判断用户输入是否包含关键词数组中的任意关键词,核心就是遍历数组加字符串包含判断。日常开发用 some 配合 includes 最省心;对性能敏感时再考虑正则方案。根据实际数据规模选择合适的写法即可。
JavaScript字符串匹配数组遍历修改时间:2026-07-28 16:27:21