如何检查字符串包含或不包含数组中的某些单词?

时间:2021-04-28 06:06:28

标签: javascript node.js arrays string

假设我有两个数组:

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 的控制台上,它给出了 false。

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

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

3 个答案:

答案 0 :(得分:0)

使用正则表达式

我基于 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)

答案 1 :(得分:0)

使用 String#splitSet


您可以使用 String#split 将字符串按空格拆分,然后使用从列表中构造的 Set 检查拆分的数组是否包含任何(使用 Array#some)字符串Set

注意:它目前区分大小写,您可以使用 toLowerCase()toUpperCase() 使其不区分大小写。

const 
  rejectBill = ["cancel", "delete", "discard", "erroneously"],
  readBill = ["bill", "account", "amount"],
  stringBill = "Read bill from text to be cancelled",
      
  strInList = (str, lst, set = new Set(lst)) => str.split(" ").some((s) => set.has(s)),

  isRead = strInList(stringBill, readBill) && !strInList(stringBill, rejectBill);

console.log(isRead);

答案 2 :(得分:-2)

通过快速查看您的代码,它似乎确实按照有人值班的方式工作。您的示例“从要取消的文本中读取账单”返回 false,因为它检测到“'cancel'led”一词。如果您要从 'canceled' 中删除 'cancel',它将返回 true。如果您要检查空格,我会在 readBill 和 rejectBill 中的每个值后添加一个空格,如下所示:

const rejectBill = ['cancel ', 'delete ', 'discard ', 'erroneously '];
const readBill = ['bill ', 'account ', 'amount '];

当 stringBill 以这些词之一结尾时,您还需要添加故障保护。这可以通过检查字符串的最后一个字 stringBill 来轻松实现。如果您有任何问题,请随时发表评论,我会尽我所能帮助您!

相关问题