如果包含字符则 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));
}
我有这个代码,理论上应该可以工作,但它没有。
我想它缺少一些东西:
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));
}