假设我有两个数组:
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 为真。
如果有人需要更多信息,请告诉我。
答案 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#split
和 Set
。您可以使用 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 来轻松实现。如果您有任何问题,请随时发表评论,我会尽我所能帮助您!