首页 > 解决方案 > 将 DomNode 的 innerHTML 与 Regex 而不是“===”进行比较?

问题描述

我正在玩 Puppeteer,我发现在做这件事的同时学习更多的原生 JavaScript 非常棒。我找不到解释的一件事是将 DomNode 的 innerHTML 与给定的字符串进行比较。

如果我使用正则表达式,它可以工作:

await page.$$eval("span", async (spans) => {
        const term = "xxx";
        const reX = new RegExp(term);
        spans.forEach((span) => {
            console.log(reX.test(span.innerHTML));
        });
    });

如果返回 true(如果存在跨度)。

如果我使用===运算符执行相同的操作,我会得到false输出。我不确定为什么会这样。

await page.$$eval("span", async (spans) => {
        const term = "xxx";
        spans.forEach((span) => {
            console.log(term === span.innerHTML);
        });
    });

有人可以为我解释一下吗?

标签: javascriptpuppeteer

解决方案


好吧,这些不是相同的比较。

RegExp.prototype.test()与严格相等 ( ===)有很大不同。

这个例子可能会更清楚一点:

const stringToCheck = "xxx";
console.log(/x/.test(stringToCheck)); // true
console.log("x" === stringToCheck);   // false

那是因为/x/.test(stringToCheck)只需在字符串中的任意位置查找“x”并找到它,而仅当仅包含一个字符“x”"x" === stringToCheck时才会返回 true 。stringToCheck


推荐阅读