正则表达式从术语列表中拉出多字匹配

时间:2015-03-23 15:31:15

标签: javascript regex glossaries

我正在尝试从glossarizer插件修改以下正则表达式(在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'

我尝试添加new RegExp("(^|^s*|[^!])" + this.clean(term) + "\\s*$|\\s*,", "i")(添加管道,因此它应该是字符串OR逗号和空格的开头,所以最后它将是空格,后跟逗号或字符串的结尾,但它没有' t具有预期的效果(使用regex101.com,但主要是混淆)

3 个答案:

答案 0 :(得分:1)

最好用逗号空格拆分列表并过滤结果。正则表达式(尤其是JS风格,缺乏外观)在解析这样的语法时很难。

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

答案 1 :(得分:1)

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

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

RegEx Demo

答案 2 :(得分:0)

抱歉将此添加为答案而不是评论(尚未获得足够的声誉以添加评论为新内容)。这是关于检查正在使用的插件的正确JSON,因为您的“不匹配”'列表让我困惑。因为不匹配'每个被拒绝的术语都需要!,因此JSON可以是

[
{
term: "black cat",
definition: "a black cat"
},
{
term: "!black cat, cat, !Catapult",  
definition: "meow"
}
] 

这将匹配整个单词cat,包括之前或之后的标点符号,加上ginger cat' cat in the hat' '我的猫,'等,但不是catastrophecats。如果这是您想要的,则只需要进行json更改。上一个答案中的RegEx可能更符合您的要求。

自您发布可能有用的问题

以来,已经进行了相关的开发人员更新
  

忽略!在获得术语https://github.com/PebbleRoad/glossarizer/blob/master/jquery.glossarize.js

的描述时