javascript - Mongoose.js 和使用 Regexp 的查询对象

标签 javascript regex node.js mongodb mongoose

在机车应用程序中,在查询我的模型的搜索引擎中(由于通常的原因,我不会在此处讨论相当具体的元数据),我需要包含一个正则表达式引擎来检查关键字字段。

我的方法如下:

this.keywords = strings.makeSafe(this.param("keywords")).toLowerCase();
console.log(this.keywords);
if(strings.exists(this.keywords)) {
    keywords = this.keywords.split(", ");
    var len = keywords.length - 1; 
    do { 
        query.regex("/" + this.keywords[len] + "/ig", "keywords");
    } while(len--);
}

(这是 this.keywords,以便我可以在需要时将其传递给 View )。

但是,我没有匹配我知道集合中文档中可用的数据

strings.makesafe 调用只是执行以下操作:

strings.makeSafe = function(str) {
  str = String(str);
  var re = /\$/gi;
  str =  str.replace(re, "U+FF04");
  re = /\./gi;
  return str.replace(re, "U+FF08"); 
};

并且是尝试解决 mongoose 通过“.”进行代码注入(inject)的漏洞。和“$”字符。它已经过测试,应该不会导致问题。

我现在认为这与正则表达式的结构或调用方法有关。这是在 mongoose 中完成对逗号分隔关键字列表的搜索的正确语法吗?

最佳答案

您的方法存在一些问题:

  1. 假设 query 是 Mongoose Query 对象,您已将参数的顺序交换为 regex方法,因为路径首先出现,然后是正则表达式值。
  2. 您需要使用 RegExp 构建正则表达式构造函数作为带有 / 字符的文字表示法不能从字符串动态构造。
  3. 在这样的循环中调用 query.regex 不会将条件或条件组合在一起,因为每次调用都会覆盖前一个调用。相反,您可以使用 | 将关键字连接到一个组合的正则表达式中,以匹配它们中的任何一个。

把它们放在一起应该是这样的:

this.keywords = strings.makeSafe(this.param("keywords")).toLowerCase();
console.log(this.keywords);
if (strings.exists(this.keywords)) {
    keywords = this.keywords.split(", ");
    query.regex("keywords", new RegExp(keywords.join("|"), "i"));
}

关于javascript - Mongoose.js 和使用 Regexp 的查询对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24689245/

相关文章:

python - 使用正则表达式python检测句子中的表情符号

Java 正则表达式 - 为什么匹配器发现额外的字符?

javascript - [JS]返回索引页

javascript - Jquery - 在输入时,使用跨度类获取 td 内的跨度值

python - 正则表达式替换第一个和最后一个字符

javascript - 使用electron-builder时如何修改app.asar的文件夹结构?

node.js - 找不到模块 'ngx-bootstrap'

javascript - 无法在 Handlebars 中使用 if 条件

javascript - 使用 pjax 提交表单

javascript - 切换隐藏/显示不适用于子级 div