Javascript js和带有Regexp的查询对象
在一个机车应用程序中,在一个查询我的模型的搜索引擎中(由于通常的原因,我将不在这里讨论特定的元数据),我需要包含一个regexp引擎来检查关键字字段 我的做法如下:Javascript js和带有Regexp的查询对象,javascript,regex,node.js,mongodb,mongoose,Javascript,Regex,Node.js,Mongodb,Mongoose,在一个机车应用程序中,在一个查询我的模型的搜索引擎中(由于通常的原因,我将不在这里讨论特定的元数据),我需要包含一个regexp引擎来检查关键字字段 我的做法如下: this.keywords = strings.makeSafe(this.param("keywords")).toLowerCase(); console.log(this.keywords); if(strings.exists(this.keywords)) { keywords = this.keywords.sp
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,以便在需要时将其传递给视图)
但是,我没有匹配我知道在集合中的文档中可用的数据
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的代码注入漏洞。它已经过测试,不应该导致问题
我现在认为这与regexp的结构或调用方法有关。这是在mongoose中完成逗号分隔的关键字列表搜索的正确语法。您的方法存在一些问题:
query
是一个Mongoosequery
对象,那么当路径首先出现时,就可以将参数的顺序交换给方法,然后是regex值/
字符不能从字符串动态构造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"));
}
这看起来真的很好,是一个很好的解释的差距。我还没有机会测试,但一旦我测试了,我就会奖励分数。