我正在尝试为一个项目构建一个搜索功能,该功能会根据用户搜索输入以及它是否与针对项目列出的关键字相匹配来缩小项目范围。为此,我将项目关键字保存在 data
属性中,并使用 RegExp 模式将查询与这些关键字相匹配。
我目前正在使用这个表达式,我知道它是不正确的,需要你的帮助:
new RegExp('\\b(' + query + ')', 'gi')))
其中查询是 |
输入的查询的分隔值用户(例如 \\b(meat|pasta|dinner)
)。即使只有 1 个匹配项,这也会给我返回一个匹配项,例如 - meat
只是抛出一些上下文,这里有一个小例子:
如果用户输入:meat pasta dinner
,它应该列出所有具有针对它们列出的所有 3 个关键字的项目,即 meat
pasta
和晚餐
。这些与输入的顺序无关。
你能帮我用一个表达式来匹配查询中的所有单词,以任何顺序吗?
最佳答案
你可以实现先行断言
^(?=.*\bmeat\b)(?=.*\bpasta\b)(?=.*\bdinner\b).+
(?=.*\bmeat\b)
是 positive lookahead assertion ,确保 \bmeat\b
位于字符串中的某处。其他关键字也是如此,.+
实际上匹配整个字符串,但前提是断言为真。
但它也会匹配“晚餐肉 Foobar 意大利面”
关于javascript - 以任何顺序匹配查询中所有单词的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13911053/