我找不到使用正则表达式找到所有 3 个单词(或更多)的行的方法:
例子
input words: "comp abc 300"
should match: "abcdef compres 300" and "ascompr zazabcd 9300"
我现在有一个带有正则表达式的循环,它返回:
(.*comp.*)(.*abc.*)(.*300.*)
但仅按此顺序匹配。我希望它像示例中的每个顺序一样匹配
就像 SQL 中的 3 一样。
谢谢 ;)
积极的前瞻是您所需要的:
(?=.*comp)(?=.*abc)(?=.*300).*
我创建了一个封装它的 Node 函数:
// Will add a full-text regexp search to a query
// can be used like this:
// var query = myModel.model.find();
// addFullTextSearch( query, "firstName", mySearchString );
function addFullTextSearch( query, paramName, searchString ) {
if (searchString) {
var r = "";
var sss = searchString.split(" ");
if (sss.length<=1) { // only one word
r = sss[0];
} else {
// result should look like this: (?=.*comp)(?=.*abc)(?=.*300).*
for (var s in sss) {
r += "(?=.*" + sss[s] + ")";
}
r += ".*";
}
query.where(paramName).regex(new RegExp(r, 'i')); // "i" for case insensitivity
}
} // addFullTextSearch