mongodb模糊匹配正则转义

Table of Contents

    如果我要根据标题和内容搜索关键字,可以如下写法:

      return this.find({
        '$or': [
          {title: new RegExp(keyword, 'i')},
          {content: new RegExp(keyword, 'i')}
        ]
      })
      .sort({ 'pv': -1 })
      .exec();
    

    但是,keyword关键字有特殊字符如++,假如我要搜索c++关键字就失败了。

    这时要对关键字中的特殊字符进行转义,通过正则表达式统一转义,RegExp写法加双斜杠:

    const keyword = name.replace(/([\^\$\(\)\*\+\?\.\\\|\[\]\{\}])/g, "\\$1");
    

    mongodb正则表达式下面写法,keyword特殊字符转义需要加单斜杠

    {title: /keyword/i}
    

    完整代码:

    PostSchema.statics.searchPost = function(name) {
      const keyword = name.replace(/([\^\$\(\)\*\+\?\.\\\|\[\]\{\}])/g, "\\$1");
      return this.find({
        '$or': [
          {title: new RegExp(keyword, 'i')},
          {content: new RegExp(keyword, 'i')}
        ]
      })
      .sort({ 'pv': -1 })
      .exec();
    };