我有以下声明:
if (new RegExp("\\b" + product.toLowerCase() + "\\b").test(cellVal.toLowerCase())) {
console.log(product.toLowerCase() + " : " + cellVal.toLowerCase());
}我对类似的产品有意见。我有以下产品引起问题:
我发现,当tpd或tpd -活动被传入并相互测试时,test语句将传递为真。
我想要的是,如果tpd是一个完整的单词,那么测试就应该通过。如果找到tpd -活动,那么应该会通过。但是正在发生的是,tpd也在tpd活动中找到了一个匹配项。我认为\\b会解释这种情况。
product来自数据库列表,这两种产品都是有效的。cellVal是HTML中的文本。
有什么想法吗?
发布于 2018-05-11 19:09:21
使用单词边界,您可以在单词周围断言边界,而不是整个输入字符串。为了匹配整个字符串,您需要^ (插入符号-输入字符串的开头)和$ (输入字符串的美元结尾)锚点:
new RegExp("^" + product.toLowerCase() + "$")发布于 2018-05-11 19:00:49
将产品按长度向后排序:
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);https://stackoverflow.com/questions/50298640
复制相似问题