Node.js 将查询参数字符串转换为正则表达式

Node.js 将查询参数字符串转换为正则表达式,node.js,regex,mongodb,express,mongoose,Node.js,Regex,Mongodb,Express,Mongoose,我正在用expressjs和mongoose构建一个应用程序, 我正在尝试构建一个搜索端点,就像本文中指定的SpotifyAPI一样 我不知道如何将给定的查询参数转换为正则表达式以匹配所需的结果。 我的端点看起来像这样example.com/search?q=searchText 要求: q=roadhouse blues需要匹配所有结果,其中包含roadhouse和blues的名称。例:匹配“布鲁斯之家”和“布鲁斯之家” q=“roadhouse blues”如果提供报价,则必须与确切的单

我正在用expressjs和mongoose构建一个应用程序, 我正在尝试构建一个搜索端点,就像本文中指定的SpotifyAPI一样

我不知道如何将给定的查询参数转换为正则表达式以匹配所需的结果。 我的端点看起来像这样
example.com/search?q=searchText

要求:

  • q=roadhouse blues
    需要匹配所有结果,其中包含roadhouse和blues的名称。例:匹配“布鲁斯之家”和“布鲁斯之家”
  • q=“roadhouse blues”
    如果提供报价,则必须与确切的单词匹配。例:匹配“我的路屋蓝调”,但不匹配“路屋蓝调”
  • q=roadhouse NOT blues
    匹配名称中包含roadhouse但不包含blues的所有结果
  • q=roadhouse或blues
    匹配名称中包含roadhouse或blues的所有结果
  • q=bob year:2014
    匹配包含bob和2014年姓名的结果
  • q=bob年份:2014-2020
    匹配包含名称bob的结果,以及2014-2020年之间的年份

以下是每个查询的正则表达式:-

注意:所有正则表达式都使用全局、多行和不区分大小写的修饰符

  • q=roadhouse blues
    =>
    ^.*(?:roadhouse.*?blues.*?roadhouse)。*$
    ->
  • q=“roadhouse blues”
    =>
    ^.*(?:roadhouse blues)。*$
    ->
  • q=roadhouse非蓝色
    =>
    ^(?!*?蓝色)。*?roadhouse.*$
    ->
  • q=roadhouse或blues
    =>
    ^.*(?:roadhouse | blues)。*$
    ->
  • q=bob年份:2014年
    =>
    ^.*bob.*?2014年.$
    ->
  • q=bob年份:2014-2020年
    =>
    ^.*bob.*

其中大多数遵循一种非常特定的模式,您应该能够将查询转换为这些正则表达式。最后2个可能需要一些技巧,但您必须通过示例来解释这2个的具体用例。

您能为最后2个添加示例吗?名为bob和YearThank的一个,实际上这有助于解决涉及year的最后两个需求,他们需要在特定年份或年份范围内将数据添加到db中。我想这比其他的要简单,我只想检查一下字符串中是否有year:这个词,我将得到年份号,并在这个字符串中过滤查询year@nasserahmed009这应该是更好的办法。此外,如果您认为这回答了您的问题,您应该单击答案旁边的勾号图标。这有助于其他可能来寻找相同问题的人