【问题标题】:Converting a query parameters string into a regex expression将查询参数字符串转换为正则表达式
【发布时间】:2020-07-17 23:16:58
【问题描述】:

我正在用 expressjs 和 mongoose 构建一个应用程序, 我正在尝试构建一个搜索端点,如此处指定的 Spotify api https://developer.spotify.com/documentation/web-api/reference/search/search/

我在弄清楚如何将给定的查询参数转换为正则表达式以匹配所需的结果时遇到了问题。 我的端点看起来像这样example.com/search?q=searchText

要求:

  • q=roadhouse blues 需要匹配名称中包含 roadhouse 和 blues 的所有结果。例如:匹配“Blues Roadhouse”和“Roadhouse of the Blues”。
  • q="roadhouse blues" 如果提供了引号,则必须与确切的单词匹配。例如:匹配“My Roadhouse Blues”,但不匹配“Roadhouse of the Blues”
  • q=roadhouse NOT blues 匹配名称中包含 roadhouse 但不包含 blues 的所有结果。
  • q=roadhouse OR blues 匹配名称中包含 roadhouse 或 blues 的所有结果。
  • q=bob year:2014 匹配包含姓名 bob 和 2014 年的结果
  • q=bob year:2014-2020 匹配包含姓名 bob 和 2014 年至 2020 年之间的年份的结果

【问题讨论】:

  • 能否为最后两个添加示例?名字为 bob 和年份的那个

标签: node.js regex mongodb express mongoose


【解决方案1】:

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

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

  • q=roadhouse blues => ^.*?(?:roadhouse.*?blues|blues.*?roadhouse).*$ -> demo
  • q="roadhouse blues" => ^.*?(?:roadhouse blues).*$ -> demo
  • q=roadhouse NOT blues => ^(?!.*?blues).*?roadhouse.*$ -> demo
  • q=roadhouse OR blues => ^.*?(?:roadhouse|blues).*$ -> demo
  • q=bob year:2014 => ^.*?bob.*?in the year 2014.*$-> demo
  • q=bob year:2014-2020 => ^.*?bob.*?in the year (?:201[4-9]|2020).*$ -> demo

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

【讨论】:

  • 谢谢,其实这帮了大忙
  • 关于涉及年份的最后两个要求,他们需要在特定年份或年份范围内将数据添加到数据库中。我认为这比其他人更容易我只是要检查单词 year: 是否在字符串中我将获取年份编号并过滤今年内的查询
  • @nasserahmed009 这应该是更好的方法。此外,如果您认为这回答了您的问题,您应该单击答案旁边的勾号图标。这有助于其他可能来寻找相同问题的人
猜你喜欢
  • 2015-09-09
  • 1970-01-01
  • 1970-01-01
  • 2012-01-28
  • 2022-11-18
  • 2016-07-13
  • 2020-09-23
  • 1970-01-01
  • 2016-09-03
相关资源
最近更新 更多