0

我找不到使用正则表达式找到所有 3 个单词(或更多)的行的方法:

例子

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

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

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

但仅按此顺序匹配。我希望它像示例中的每个顺序一样匹配

就像 SQL 中的 3 一样。

谢谢 ;)

4

2 回答 2

3

积极的前瞻是您所需要的:

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

更多信息请访问http://www.regular-expressions.info/lookaround.html

于 2012-06-06T11:48:25.487 回答
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
于 2015-08-14T21:12:33.763 回答