Javascript 正则表达式-如何收紧它?

Javascript 正则表达式-如何收紧它?,javascript,regex,Javascript,Regex,我有以下声明: if (new RegExp("\\b" + product.toLowerCase() + "\\b").test(cellVal.toLowerCase())) { console.log(product.toLowerCase() + " : " + cellVal.toLowerCase()); } 我对类似的产品有意见。我有以下引起问题的产品: tpd tpd-活动 我发现,当tpd或tpd-activity传入并相互测试时,test语句作为true传递 我想

我有以下声明:

if (new RegExp("\\b" + product.toLowerCase() + "\\b").test(cellVal.toLowerCase())) {
    console.log(product.toLowerCase() + " : " + cellVal.toLowerCase());
}
我对类似的产品有意见。我有以下引起问题的产品:

  • tpd
  • tpd-活动
  • 我发现,当tpd或tpd-activity传入并相互测试时,
    test
    语句作为true传递

    我想要的是,如果tpd作为一个整体被发现,那么测试应该通过。如果找到tpd活动,则应该通过。但目前的情况是,tpd在tpd活动中也取得了相应的进展。我认为
    \\b
    可以解释这种情况

    产品
    来自数据库列表,两种产品均有效
    cellVal
    是HTML表格中的文本


    有什么想法吗?

    按长度向后排序产品:

    const products = ["tpd - activity", "tpd"];
    
    (如果您确实需要以编程方式对它们进行排序):

    然后将第一个包含在内:

    const result = products.find(p => cellVal.toLowerCase().includes(p));
    
    console.log(result);
    

    使用单词边界,您可以在单词周围(而不是整个输入字符串)断言边界。要匹配整个字符串,您需要
    ^
    (插入符号-输入字符串的开头)和
    $
    (美元-输入字符串的结尾)锚定:


    cellVal
    中是否有任何额外的文本,或者它是否只会是
    tpd
    tpd-activity
    (好的,在其他值中)。@vlaz-cellVal中有一些变化(特别是在tpd-activity中,我也看到了它有tpd-activity基础的地方)-但是,如果它找到tpd-activity,那么它需要匹配它。分别用
    ^
    $
    替换
    \\b
    标记:
    新的RegExp(“^”+product.toLowerCase()+“$”)
    您是regex,只需测试
    cellValue
    “tpd-activity”中是否存在
    product
    包含
    “tpd”
    \b
    只需检查单词边界(空格、标点符号等)。我不想成为坏消息的传递者,但如果添加
    ^$
    可以解决您的问题,那么您根本不需要正则表达式。一个简单的字符串比较就是您所需要的:
    if(product.toLowerCase()==cellVal.toLowerCase())
    您可以使用
    i
    标志,而不是所有那些
    toLowerCase()
    调用。这本身应该是一个有疑问的注释。@revo-谢谢,这对我帮助很大!
    const result = products.find(p => cellVal.toLowerCase().includes(p));
    
    console.log(result);
    
    new RegExp("^" + product.toLowerCase() + "$")