javascript - 以任何顺序匹配查询中所有单词的正则表达式

标签 javascript jquery regex

我正在尝试为一个项目构建一个搜索功能,该功能会根据用户搜索输入以及它是否与针对项目列出的关键字相匹配来缩小项目范围。为此,我将项目关键字保存在 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).+

查看here on Regexr

(?=.*\bmeat\b)positive lookahead assertion ,确保 \bmeat\b 位于字符串中的某处。其他关键字也是如此,.+ 实际上匹配整个字符串,但前提是断言为真。

但它也会匹配“晚餐肉 Foobar 意大利面”

关于javascript - 以任何顺序匹配查询中所有单词的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13911053/

相关文章:

javascript - 不显示 'ko with'则显示不同的内容

javascript - 在没有 transaction.get() 的情况下启动 firestore 事务

javascript - 使用 Multer 上传的文件的 URL

javascript - jQuery - 如何选择之前选择的 Select 选项?

javascript - 显示:none is preventing click event in jQuery

正则表达式:删除除第一个字符和最后一个数字之外的所有内容

javascript - 如何在ipad上播放多种声音

javascript - 基于 .length 创建多个元素

java - 未记录的 Java 正则表达式字符类 :\p{C}

javascript - 如何将正则表达式序数转换为 <上标 [JavaScript]?