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 に答える