如果包含字符则 x,否则 y (Puppeteer)

If contains characters then x, else y (Puppeteer)

我有这个代码,理论上应该可以工作,但它没有。

我想它缺少一些东西:

function containsWords(words, word) {
    return words.filter(w => w === word).length > 0;
}

async function grabResult(page) {
    const message = await page.$eval(
        'div > div:nth-child(2)',
        (el) => el.innerText
    );
    
    const username = await page.$eval(
        'child(15) .username',
        (el) => el.innerText
    );

    return {
        message: containsWords(['http', 'https'], message) ? '' : message,
        username: username
    };
};


module.exports = grabResult;

基本上,如果消息中有“http”或“https”,上面的代码应该输出一条空消息:

{ message: '', username: 'John' }

如果检测到 none 个单词,则应该正常输出消息:

{ message: 'message text', username: 'John' }

但是,现在即使邮件确实包含“http”和“https”,它仍然returns包含这些词的邮件。

所以它要么没有检测到这些词,要么根本不执行 containsWords 过滤器。

无论我选择的停用词如何,它都会忽略并输出每条消息。

如果有知识渊博的人能查看代码并告诉我这里缺少什么,我将不胜感激。

谢谢。

containsWords() 中,您将整个消息与每个单词进行比较。要检查消息是否包含任何单词,您需要这样的东西:

function containsWords(words, message) {
    return words.some(w => message.includes(w));
}