我有以下声明:
if (new RegExp("\\b" + product.toLowerCase() + "\\b").test(cellVal.toLowerCase())) {
console.log(product.toLowerCase() + " : " + cellVal.toLowerCase());
}
我遇到类似产品的问题。我有以下产品导致问题:
我发现,当tpd或tpd - 活动传入并相互测试时,test
语句传递为true。
我想要的是如果找到整个单词的tpd那么测试应该通过。如果找到tpd - 活动那么应该通过。但正在发生的事情是,tpd也在tpd - 活动中获得了匹配。我认为\\b
会解释这种情况。
product
来自数据库列表,两个产品都有效。 cellVal
是HTML表格中的文字。
有什么想法吗?
答案 0 :(得分:1)
使用单词边界可以断言单词周围的边界而不是整个输入字符串。要匹配整个字符串,您需要^
(插入符号 - 输入字符串的开头)和$
(美元 - 输入字符串的结尾)锚点:
new RegExp("^" + product.toLowerCase() + "$")
答案 1 :(得分:0)
长度后向后排序产品:
const products = ["tpd - activity", "tpd"];
(如果您确实需要以编程方式对它们进行排序):
products.sort((a, b) => b.length - a.length);
然后获得第一个:
const result = products.find(p => cellVal.toLowerCase().includes(p));
console.log(result);