正则表达式 - 我该如何收紧?

时间:2018-05-11 18:57:54

标签: javascript regex

我有以下声明:

if (new RegExp("\\b" + product.toLowerCase() + "\\b").test(cellVal.toLowerCase())) {
    console.log(product.toLowerCase() + " : " + cellVal.toLowerCase());
}

我遇到类似产品的问题。我有以下产品导致问题:

  1. TPD
  2. tpd - 活动
  3. 我发现,当tpd或tpd - 活动传入并相互测试时,test语句传递为true。

    我想要的是如果找到整个单词的tpd那么测试应该通过。如果找到tpd - 活动那么应该通过。但正在发生的事情是,tpd也在tpd - 活动中获得了匹配。我认为\\b会解释这种情况。

    product来自数据库列表,两个产品都有效。 cellVal是HTML表格中的文字。

    有什么想法吗?

2 个答案:

答案 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);