Javascript 如何搜索与其他单词相似的单词?

Javascript 如何搜索与其他单词相似的单词?,javascript,arrays,node.js,string,Javascript,Arrays,Node.js,String,我希望在Node.js中创建一个小脚本,将单词与另一个类似的单词进行匹配。例如,我正在搜索***ing,我有一个类似['loving',matting',cats',wording']的数组,然后我希望它返回['loving',matting']并排除['cats'](因为它不以ing结尾)和['wording'](因为它是七个字符而不是六个字符) 这是我目前编写的无法工作的代码 let foundWords = []; for (let i = 0, len = wordList.length


我希望在Node.js中创建一个小脚本,将单词与另一个类似的单词进行匹配。例如,我正在搜索
***ing
,我有一个类似
['loving',matting',cats',wording']
的数组,然后我希望它返回
['loving',matting']
并排除
['cats']
(因为它不以ing结尾)和
['wording']
(因为它是七个字符而不是六个字符)

这是我目前编写的无法工作的代码

let foundWords = [];
for (let i = 0, len = wordList.length; i < len; i++) {
  for (let j = 0, len = wordList[i].split('').length; j < len; j++) {
    if (wordToFind.charAt(j) == '*') {
      return;
    };
    if (wordToFind.charAt(j) === wordList[i].charAt(j)) {
      if (foundWords.includes(wordList[i]) == false) {
        foundWords.push(wordList[i]);
      };
    }
  }  
}
console.log(foundWords);
让foundWords=[];
for(设i=0,len=wordList.length;i
写这段代码的目的是让我能够用字典列出密码的所有组合和里面的单词


我真的建议您阅读关于Levenshtein distance 听起来和你在这里想要达到的目标一模一样

还提供了java脚本的实现

在信息论和计算机科学中,Levenshtein距离 是一种度量标准,用于测量两个变量之间的差异量 序列(即编辑距离)。之间的Levenshtein距离 两个字符串被定义为编辑所需的最小数量 使用允许的编辑将一个字符串转换为另一个字符串 插入、删除或替换单个 性格

例如,“小猫”和“坐着”之间的Levenshtein距离是3, 由于以下三个编辑将一个更改为另一个,因此 这不是一种只需少于三次编辑的方法:

kitten sitten(将“k”替换为“s”)

sitten sittin(将“e”替换为“i”)

坐着(在末尾插入“g”)

您可以与一个

要构造正则表达式,需要将通配符
*
替换为正则表达式的通配符:
。然后添加
^
$
以锚定正则表达式,以便从字符串的开头到结尾进行匹配

功能过滤器匹配(打捆针、干草堆){
const regex=new RegExp('^'+needle.replace(/\*/g'.')+'$);
返回haystack.filter(word=>regex.test(word));
}

log(filterMatches('***ing',['loving','matting','cats','wording'])嘿,我想这应该行得通。如果您不了解某个零件,请尝试在上查找
字符串.prototype
函数。了解其中一些函数真的很有帮助,因为它会使您的代码更容易编写

let input='***ing';
让inputLength=input.length
让结果=[];
而(输入字符(0)=“*”){
input=input.substr(1);
}
const arr=[‘爱’、‘交配’、‘猫’、‘措辞’];
for(设i=0;i控制台日志(结果)另一种方法可能是:

函数getMatches(ts、ss){ var es=ts.split(/\*+/)[1];//或ts.match(/[^\*]+$/)[0]; 返回ss.filter(s=>s.endsWith(es)&&s.length==ts.length) } var res=getMatches(“***ing”、[‘爱’、‘交配’、‘猫’、‘措辞’]);
控制台日志(res)顺便说一句,虽然这项工作使用了4castle解决方案,但要优雅得多。