【中等】算法nodeJs:字符串通配符

103 阅读1分钟

描述

在计算机中,通配符是一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。让我们来学习通配符的匹配规则:
∙‘*’ 符号代表匹配 0 个或以上的数字或字母;
∙‘?’ 符号代表匹配 1 个数字或字母;
∙小写字母字符代表匹配自身和自身的大写字母形态;
∙大写字母字符代表匹配自身和自身的小写字母形态;
∙其他字符代表匹配自身。

现在,对于给定的通配符字符串 s 和目标字符串 p,不考虑大小写,请判断 s 是否可以匹配得到 p。如果可以,输出 true;否则,输出 false。

在本题中,给定的字符串由 ASCII 码在 33 到 126 范围内的可见字符构成。您可以参阅下表获得其详细信息(您可能关注的内容是,这其中不包含空格、换行)。

/图片/AllAsciipng

输入描述:

第一行输入一个长度为 1≦len(s)≦100、由可见字符构成的通配符字符串 s。
第二行输入一个长度为 1≦len(p)≦100 、由可见字符构成的目标字符串 p。

输出描述:

如果可以匹配得到,输出 true;否则,输出 false。

image.png

image.png

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    // Write your code here
    let reg = await readline();
    const s = await readline();

    reg = reg.replace(/\*/g, "\\w*").replace(/\?/g, "\\w").toLowerCase();

    const r = new RegExp(reg);

    const res = s.match(r);

    if (res === null) {
        console.log(false);
        return;
    }
    if (res[0] === s) {
        console.log(true);
        return;
    }
    console.log(false);
})();