ES6的includes()方法区分大小写且不支持正则或ignoreCase选项,需统一转小写(如str.toLowerCase().includes(search.toLowerCase()))实现忽略大小写的子串匹配。

ES6 的 includes() 方法本身区分大小写,不支持正则或忽略大小写的原生参数。要实现大小写不敏感的模糊搜索,核心思路是**统一转换为同一种大小写后再比较**,而不是修改 includes 本身。
为什么不能直接让 includes 忽略大小写
includes() 只接受字符串作为搜索参数,不接受正则表达式;传入 /abc/i 会直接报错。它也没有内置的 ignoreCase 选项。所以必须靠开发者手动做大小写归一化处理。
标准做法:统一转小写(或大写)后匹配
对目标字符串和搜索词都调用 toLowerCase()(推荐)或 toUpperCase(),再使用 includes():
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
-
推荐写法:
str.toLowerCase().includes(search.toLowerCase()) - 适用于任意位置的子串匹配,比如检查
"UserInput"是否含"user"→true - 注意:两个字符串都要转换,只转一个会导致逻辑错误
- 示例:
"Hello World".toLowerCase().includes("WORLD".toLowerCase())→true
封装成可复用的函数更安全
避免每次手写重复逻辑,建议封装一个工具函数:
function containsIgnoreCase(str, search) { return str?.toLowerCase().includes(search?.toLowerCase()); }- 加了可选链
?.防止null或undefined报错 - 自动处理空值、非字符串输入(如数字会转成字符串再小写,通常符合预期)
- 在 Vue/React 项目中可作为工具方法全局引入
注意边界情况
大小写转换不是万能的,需留意这些细节:
- 某些语言(如土耳其语)的大小写规则特殊,
toLowerCase()在非英语环境可能有偏差;普通中文、英文项目基本无影响 - 如果搜索内容来自用户输入,建议提前
trim()去除首尾空格,避免误判 - 不需要模糊到“相似字符”(如全角/半角、重音符号),那是更高级的文本匹配范畴,
includes不负责

















