【问题标题】:mongodb regex parametermongodb正则表达式参数
【发布时间】:2015-04-07 14:27:47
【问题描述】:

参考下面的代码:

{$or: [
        {titleLong: { $regex: regExp } },
        {catalog: { $regex: regExp } },
        {catalogNbr: { $regex: regExp } }
      ]}

我正在尝试查找其字段与某个正则表达式匹配的文档。例如,有这个文件。

{course: {titleLong: "Introduction to analysis of algorithms"},
         {catalog: "cs3333"},
         {catalogNbr: "3333"}}

当用户键入“intro algo”或“3333”或“cs3333”时,文档应该被返回。我尝试了/(intro|algo)/gi,但它不起作用,因为它返回所有具有introalgo 的文档。此外,g 选项似乎不起作用。我还发现了以下正则表达式:

(?=.*\bintro\b)(?=.*\balgo\b).+

但这只会找到单词与 intro 完全一样的文档,而忽略了 introduction

【问题讨论】:

  • 然后删除单词边界。 (?=.*intro)(?=.*algo).+
  • 删除第一个 \b 以查找以以下值开头的单词的条目:(?=.*\bintro)(?=.*\balgo).+

标签: javascript regex mongodb


【解决方案1】:

删除前瞻断言中存在的单词边界,以便进行部分匹配。

(?=.*intro)(?=.*algo).+

(?=.*intro).*algo.*

别忘了打开不区分大小写的修饰符i

包括匹配"3333""cs3333" 的模式。

(?=.*intro).*algo.*|^(?:cs)?3333$

【讨论】:

    【解决方案2】:

    您可以在定义$regex 时使用PCRE。您可以返回以特定单词开头的所有条目,并使用 (?i) 等内联选项(不区分大小写的搜索)。这是一个例子:

     {titleLong: { { $regex: '(?i).*\bintro.*' } }
    

    或在字符串中的任何位置包含“intro”的entris:

     {titleLong: { { $regex: '(?i).*intro.*' } }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-22
      • 2016-03-02
      • 2014-01-26
      • 1970-01-01
      相关资源
      最近更新 更多