我正在尝试为一个项目构建一个搜索功能,该功能根据用户搜索输入以及它是否与针对项目列出的关键字匹配来缩小项目范围。为此,我将项目关键字保存在data
属性并使用 RegExp 模式将查询与这些关键字进行匹配。
我目前正在使用这个表达式,我知道它不正确,需要您的帮助:
new RegExp('\\b(' + query + ')', 'gi')))
查询在哪里|
用户输入的查询的分隔值(例如\\b(meat|pasta|dinner)
)。即使只有 1 个匹配,这也会返回一个匹配,例如 -meat
只是为了提供一些背景信息,这里有一个小例子:
如果用户输入:meat pasta dinner
它应该列出所有包含 3 个关键字的项目,即meat
pasta
and dinner
。它们与输入的顺序无关。
您能帮我设计一个可以按任意顺序匹配查询中所有单词的表达式吗?
您可以实现前瞻断言
^(?=.*\bmeat\b)(?=.*\bpasta\b)(?=.*\bdinner\b).+
See it 在 Regexr 上 http://regexr.com?335fm
(?=.*\bmeat\b)
is a 积极的前瞻断言 http://www.regular-expressions.info/lookaround.html,这确保了\bmeat\b
是字符串中的某处。其他关键字和.+
然后实际上匹配整个字符串,但前提是断言为真。
但它也可以搭配“晚餐肉 Foobar 面食”
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)