猫鼬:如何在任何顺序和字符串中的任何位置找到3个单词? (SQL 3喜欢和)

时间:2012-06-06 11:46:04

标签: regex filter mongoose

我找不到一种方法来找到一个包含正则表达式的所有3个字(或更多)的行:

例如

input words: "comp abc 300"
should match: "abcdef compres 300" and "ascompr zazabcd 9300"

我现在有一个带有正则表达式的循环返回:

(.*comp.*)(.*abc.*)(.*300.*)

但只按此顺序匹配。我希望它匹配每个顺序,如示例

它就像在SQL中一样喜欢和它们之间。

谢谢;)

2 个答案:

答案 0 :(得分:3)

你需要积极向前看:

(?=.*comp)(?=.*abc)(?=.*300).*

http://www.regular-expressions.info/lookaround.html

的更多信息

答案 1 :(得分:0)

我已经创建了一个封装它的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