0

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

 var regex = new RegExp("(^s*|[^!])" + this.clean(term) + "\\s*|\\,$", "i");

它试图在术语和定义的 JSON 数组中检索术语的定义。

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

现在,当我传入“cat”时,它与“black cat”匹配,但我不希望它匹配。我希望它匹配从字符串开头或逗号之后开始*/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")(添加管道,因此它应该是字符串或逗号和空格的开头,所以最后它将是空格,后跟逗号或字符串的结尾,但它没有达到预期的效果(使用 regex101 .com,但大多感到困惑)

4

3 回答 3

1

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

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

正则表达式演示

于 2015-03-23T16:59:02.300 回答
1

您最好用逗号分隔列表并过滤结果。正则表达式(尤其是 JS 风格,缺乏后视)在解析这样的语法方面很糟糕。

terms = "feline, cat, cheetah";
if(terms.toLowerCase().split(", ").indexOf("cat") >= 0)
   // a cat was there!
于 2015-03-23T15:48:33.707 回答
0

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

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

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

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

忽视 !在获取术语描述时用词https://github.com/PebbleRoad/glossarizer/blob/master/jquery.glossarize.js

于 2015-07-10T01:35:49.777 回答