mongodb正则表达式参数

时间:2015-04-07 14:27:48

标签: javascript regex mongodb

请参阅以下代码:

{$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的文字的文档。

2 个答案:

答案 0 :(得分:2)

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

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

OR

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

并且不要忘记打开不区分大小写的修饰符i

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

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

答案 1 :(得分:0)

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

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

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

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