You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Node.js编写脚本匹配符合通配符规则的相似单词?

解决通配符单词匹配的Node.js脚本问题

我来帮你搞定这个通配符匹配的问题!你想要实现的是匹配符合特定通配符模式的单词,比如用***ing筛选出长度为6且以ing结尾的单词,同时排除长度不符或者结尾不对的项,还要用这个脚本暴力破解密码图里的单词组合对吧?

先看看你现有代码的几个关键问题:

  • 内部循环里用了return,直接终止了整个函数,导致还没完成所有单词的检查就退出了
  • 重复使用了len变量,覆盖了外层循环的长度值,会导致循环逻辑混乱
  • 没有先检查单词长度和模式长度是否一致,长度不符的单词也会进入匹配流程
  • 通配符*的处理逻辑错误,遇到*直接返回,而不是跳过该位置的匹配

下面给你两种可行的解决方案,你可以根据需求选择:

方案一:利用正则表达式(简洁高效)

把通配符模式转换成正则表达式,*替换为匹配任意字符的.,再加上开头^和结尾$锚点确保完全匹配,同时先检查长度优化性能:

const wordList = ['loving', 'mating', 'cats', 'wording'];
const pattern = '***ing';

// 将通配符转换为正则表达式规则
const regexStr = '^' + pattern.replace(/\*/g, '.') + '$';
const matchRegex = new RegExp(regexStr);

const foundWords = wordList.filter(word => {
    // 先校验长度,不一致直接跳过,减少正则匹配次数
    if (word.length !== pattern.length) return false;
    return matchRegex.test(word);
});

console.log(foundWords); // 输出: ['loving', 'mating']

方案二:逐字符手动匹配(更直观可控)

修复你原来的循环逻辑,正确处理通配符,先检查长度再逐字符比对:

const wordList = ['loving', 'mating', 'cats', 'wording'];
const wordToFind = '***ing';
const foundWords = [];

// 遍历每个单词
for (const word of wordList) {
    // 第一步:长度不一致直接跳过
    if (word.length !== wordToFind.length) continue;
    
    let isMatch = true;
    // 逐字符比对模式和单词
    for (let j = 0; j < wordToFind.length; j++) {
        const patternChar = wordToFind[j];
        // 如果是通配符*,跳过当前位置的比对
        if (patternChar === '*') continue;
        // 字符不匹配,标记为不匹配并退出内层循环
        if (patternChar !== word[j]) {
            isMatch = false;
            break;
        }
    }
    
    // 匹配成功且未在结果数组中,添加进去
    if (isMatch && !foundWords.includes(word)) {
        foundWords.push(word);
    }
}

console.log(foundWords); // 输出: ['loving', 'mating']

这两种方案都能正确筛选出你想要的单词,对于暴力破解密码图的场景,正则方案的性能会更好一些,尤其是当单词列表很大的时候。

附上你提到的密码图示例:
cryptogram sheet

内容的提问来源于stack exchange,提问作者user7885981

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:48:59