首页 > 解决方案 > 如何检查字符串是否包含数组中的某些单词?

问题描述

假设我有两个数组:

const rejectBill = ['cancel', 'delete', 'discard', 'erroneously']

const readBill = ['bill','account','amount']

我有一个字符串,

const stringBill = 'Read bill from text to be cancelled'

我想检查 bill 是否包含来自 readBill 的单词然后返回 true,但如果它还包含来自 rejectBill 的单词则返回 false。

为此,我尝试了:

let stringSatus = readBill.some(keyword => stringBill.toLowerCase().includes(keyword.toLowerCase())) && 
                   !rejectBill.some(keyword => stringBill.toLowerCase().includes(keyword.toLowerCase()))

但是在 stringSatus 的控制台上,它给出了错误。

当字符串包含来自 readBill 数组的单词不包含来自rejectBill 数组的单词时,我希望 stringStatus 为真,当字符串包含来自rejectBill 的单词时为假。

如果有人需要更多信息,请告诉我。

标签: javascriptnode.jsarraysstring

解决方案


使用正则表达式

regex根据string[]和测试创建了一个动态的,如果string通过regex.

const rejectBill = ['cancel', 'delete', 'discard', 'erroneously'];

const readBill = ['bill', 'account', 'amount'];

const stringBill = 'Read bill from text to be cancelled';

var rejectBillRegex = new RegExp(rejectBill.map(t => `\\b${t}\\b`).join('|'), 'i'),
  readBillRegex = new RegExp(readBill.map(t => `\\b${t}\\b`).join('|'), 'i');

var stringSatus = readBillRegex.test(stringBill) && !rejectBillRegex.test(stringBill);
console.log(stringSatus)


推荐阅读