是否存在支持单词乱序匹配字符串的JavaScript方法?
问题原因
includes() 执行的是连续子串完全匹配,只会判断原字符串中是否存在和输入搜索内容完全一致的连续字符段,你输入顺序颠倒的world Hello在原字符串中没有对应的连续片段,所以返回结果为false。
实现乱序单词匹配的方案
核心思路是把搜索词和原字符串都拆分为独立单词,逐个校验所有搜索词的单词都存在于原字符串的单词集合中即可,还可以根据需求扩展大小写不敏感、忽略标点等能力。
基础实现代码
let string = "Hello world, welcome to the universe."; // 1. 处理原字符串:去除标点、转小写、拆成单词数组,转Set方便快速查询 const originWords = new Set( string.replace(/[^\w\s]/g, '').toLowerCase().split(/\s+/) ); // 2. 处理搜索词:同样转小写、拆成单词数组 const searchStr = "world Hello"; const searchWords = searchStr.toLowerCase().split(/\s+/); // 3. 校验所有搜索词的单词都存在于原字符串的单词集合中 const isMatch = searchWords.every(word => originWords.has(word)); if (isMatch) { console.log(string); } console.log(isMatch); // 输出true
代码说明
- 用
replace(/[^\w\s]/g, '')去掉原字符串里的逗号、句号等标点,避免标点附着在单词上导致匹配失败 - 统一转小写实现大小写不敏感的匹配,如果需要严格区分大小写可以去掉这一步
every()方法会校验搜索词的每一个单词都在原字符串的单词集合里,只要有一个不存在就返回false- 用
Set存储原字符串单词,查询时间复杂度是O(1),比数组的includes()查询效率更高,尤其是长文本场景下优势更明显
内容的提问来源于stack exchange,提问作者BigBang001
相关产品推荐
相关产品推荐

