如何实现类似MySQL LIKE的JavaScript字符串模糊查询?
实现类似MySQL LIKE的JavaScript字符串匹配函数
可以通过改造搜索函数,增加对通配符%的判断逻辑,同时保留默认的startsWith行为:
核心思路
- 默认使用
startsWith实现前缀匹配(效果等同于LIKE "Bruno%") - 当搜索关键词以
%开头时,移除通配符后用includes实现任意位置匹配(效果等同于LIKE "%Bruno%")
完整代码示例
const words = ['Bruno Nobre', 'José Bruno', 'Bruno Ricardo', 'Antônio Bruno']; // 支持通配符的搜索函数 const searchValue = (data, keyword) => { // 处理开头通配符的情况 if (keyword.startsWith('%')) { const target = keyword.slice(1); return data.filter(item => item.includes(target)); } // 默认前缀匹配 return data.filter(item => item.startsWith(keyword)); }; // 测试默认前缀匹配(对应 LIKE "Bruno%") const prefixMatch = searchValue(words, 'Bruno'); console.log(prefixMatch); // 输出: ['Bruno Nobre', 'Bruno Ricardo'] // 测试任意位置匹配(对应 LIKE "%Bruno%") const anyPositionMatch = searchValue(words, '%Bruno'); console.log(anyPositionMatch); // 输出: ['Bruno Nobre', 'José Bruno', 'Bruno Ricardo', 'Antônio Bruno']
扩展优化(可选)
如果需要大小写不敏感的匹配,可以在判断时统一转换为小写:
const searchValue = (data, keyword) => { if (keyword.startsWith('%')) { const target = keyword.slice(1).toLowerCase(); return data.filter(item => item.toLowerCase().includes(target)); } const target = keyword.toLowerCase(); return data.filter(item => item.toLowerCase().startsWith(target)); };
内容的提问来源于stack exchange,提问作者Bruno Nobre
相关产品推荐
相关产品推荐

