Regex从术语列表中提取多词匹配项
Regex to pull multiword matches from list of terms
我正试图从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"时,它正在匹配"blackcat",但我不希望它匹配。我希望它匹配从字符串开头或逗号和*/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,但很困惑)
您最好用逗号分隔列表并过滤结果。Regex(尤其是JS风格的,缺少lookbehinds)不善于解析这样的语法。
terms = "feline, cat, cheetah";
if(terms.toLowerCase().split(", ").indexOf("cat") >= 0)
// a cat was there!
您可以使用此正则表达式来匹配您的有效案例:
/(?:^|,) *'bcat(?= *(?:,|$))/gmi
RegEx演示
很抱歉将其添加为答案而非评论(尚未获得足够的声誉来添加新评论)。这是关于检查插件是否使用了正确的JSON,因为您的"不匹配"列表让我感到困惑。对于"不匹配的",每个被拒绝的术语都需要!
在其前面,因此JSON可能是
[
{
term: "black cat",
definition: "a black cat"
},
{
term: "!black cat, cat, !Catapult",
definition: "meow"
}
]
这将匹配整个单词cat
,包括前后的标点符号,加上ginger cat
"帽子里的猫"我的猫"等,但不匹配catastrophe
或cats
。如果这是您想要的,那么只需要对json进行更改。不过,上一个答案中的RegEx可能更符合您的需求。
自从你发布你的问题后,已经进行了相关的开发人员更新,这可能是有用的
忽略!在获得术语描述的同时https://github.com/PebbleRoad/glossarizer/blob/master/jquery.glossarize.js
- 在数据提取完成之前进行页面渲染
- 如何在Javascript中从字符串中提取某些单词
- RegEx JavaScript:数字后的符号提取
- 如何在内联依赖项并将图像转换为dataURI的情况下完全提取网页
- Regex提取URL返回数组的一部分;未定义”;
- 如何提取“;href"最近列表项中的属性值
- 使用时刻.js从日期时间中提取时间
- 通过javascript从会话中提取用户名
- HTML页面如何提取通过表单传递的参数
- 是否可以自动拉取“随机”;标签“;从一长串文本中提取
- innerHTML的子字符串可以在初始调用时提取吗
- 如何使用phonegap从安卓设备中提取联系人的字母顺序
- 如何从特定页面中提取php变量值
- 从字符串中提取年份的Javascript正则表达式
- 如何使用JavaScript提取此url的一部分
- 使用BeautifulSoup从Javascript中提取文本以获得关注者数量
- 使用javascript从字符串中提取浮点数
- 如何使用另一个字符串作为模板从字符串中提取数据
- 用于编写与我作为客户端查看的网页交互的脚本的术语(如果有的话)是什么
- Regex从术语列表中提取多词匹配项