Javascript 正则表达式从术语列表中提取多字匹配项

Javascript 正则表达式从术语列表中提取多字匹配项,javascript,regex,glossaries,Javascript,Regex,Glossaries,我试图从插件中修改以下正则表达式(javascript),使其不那么宽松 var regex = new RegExp("(^s*|[^!])" + this.clean(term) + "\\s*|\\,$", "i"); 它试图在一个包含术语和定义的JSON数组中检索术语的定义 [{term: "black cat", definition: "a black cat"}, {term: "cat", definition: "meow"}] 现在当我通过“猫”时,它与“黑猫”匹配,但

我试图从插件中修改以下正则表达式(javascript),使其不那么宽松

 var regex = new RegExp("(^s*|[^!])" + this.clean(term) + "\\s*|\\,$", "i");
它试图在一个包含术语和定义的JSON数组中检索术语的定义

[{term: "black cat", definition: "a black cat"},
{term: "cat", definition: "meow"}]
现在当我通过“猫”时,它与“黑猫”匹配,但我不希望它匹配。我希望它匹配从字符串开头或逗号和
*/s
之后开始,以逗号或字符串结尾结束的内容,以便可以传入多个定义

*Match for cat:
'cat'
' Cat '
'cat, feline'
'feline, cat  , cheetah'

*Not a match for cat:
'black cat'
'Catapult'
'!cat'

我试着把
newregexp((^^^s*.[^!])“+this.clean(term)+“\\s*$\\\s*,”,“I”)
(添加管道,使其应该是字符串的开头或逗号和空格,因此在结尾处应该是空格后跟逗号或字符串的结尾,但没有达到预期效果(使用regex101.com,但大多数情况下比较混乱)

最好用逗号分隔列表并过滤结果。正则表达式(尤其是JS风格,缺少lookbehind)不擅长解析这样的语法

terms = "feline, cat, cheetah";
if(terms.toLowerCase().split(", ").indexOf("cat") >= 0)
   // a cat was there!

您可以使用此正则表达式来匹配您的有效案例:

/(?:^|,) *\bcat(?= *(?:,|$))/gmi

很抱歉将此添加为回答而不是评论(尚未获得足够的声誉来添加新的评论)。这是关于检查插件使用的JSON是否正确,因为您的“不匹配”列表让我感到困惑。对于“不匹配”,每个被拒绝的术语都需要在前面加上
,这样JSON就可以被删除

[
{
term: "black cat",
definition: "a black cat"
},
{
term: "!black cat, cat, !Catapult",  
definition: "meow"
}
] 
这将匹配整个单词
cat
,包括前后的标点符号,再加上
ginger cat
“帽子里的猫”“我的猫”等,但不匹配
carbition
cats
。如果这是您想要的,只需要对json进行更改。但前面答案中的正则表达式可能更符合您的要求

自从您发布了可能有用的问题后,已经进行了相关的开发人员更新

忽略!在获取术语描述时出现在单词中


提供一些输入示例和您期望的匹配项。
black cat
为什么不匹配?规则是什么?括号是字符串的一部分还是用来说明您的问题的?您希望用简单的英语表达哪些规则?您发布的预期输出的输入是什么?