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());
}
我对类似的产品有意见。我有以下引起问题的产品:
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() + "$")