我正在尝试从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,但主要是混淆)
答案 0 :(得分:1)
最好用逗号空格拆分列表并过滤结果。正则表达式(尤其是JS风格,缺乏外观)在解析这样的语法时很难。
terms = "feline, cat, cheetah";
if(terms.toLowerCase().split(", ").indexOf("cat") >= 0)
// a cat was there!
答案 1 :(得分:1)
答案 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' '我的猫,'等,但不是catastrophe
或cats
。如果这是您想要的,则只需要进行json更改。上一个答案中的RegEx可能更符合您的要求。
自您发布可能有用的问题
以来,已经进行了相关的开发人员更新忽略!在获得术语https://github.com/PebbleRoad/glossarizer/blob/master/jquery.glossarize.js
的描述时