3

私はそれ以上考えることができない点に出くわしました。簡単に言えば、私は数ul百のを持っておりli、それぞれliがテキストとして数十の単語を持っています。リストの一番上に、ユーザーがいくつかのキーワードを入力するための入力ボックスを配置しました。たとえば、その巨大なリストから、同じ行に次の3つの単語が存在する行のみを除外したいとします:「赤い甘いイチゴ」。検索ボタンを押すと、行が除外され、興味のある単語を含む行が2行だけになります。

li1:「赤い甘いイチゴを食べるのが待ちきれません」

li2:「夏で、赤い甘いイチゴは今新鮮です」

この時点まで、すべてが正常です。

この問題は、検索された3つの単語が文字列に沿って他の単語または文字で区切られている場合に発生します。したがって、上の例では、フィルターに次の行が表示されることはありません。

li3:「赤く甘いイチゴは現在市場に出ています」

したがって、ここでは、上の例の結果をフィルター処理して分類する関数全体を配置します。

$(document).ready(function() {
      var links = new Array();
      $("h4").each(function(index, element) {
      links.push({
            text: $(this).text(),
            element: element
        });
    });

    $("#searchbutton").click(function() {
        var query = $("#inputtext").val();
        var querywords = query.split(',');

        var results = new Array();
        for(var i = 0; i < querywords.length; i++) {
            for(var j = 0; j < links.length; j++) {
                if (links[j].text.toLowerCase().indexOf(querywords[i].toLowerCase()) > -1) {
                    results.push(links[j].element);                    
                    }
            }
        }

        $("h4").each(function(index, element) {
            this.style.display = 'none';
        });
        for(var i = 0; i < results.length; i++) {
            results[i].style.display = 'block';
        }

    });     

});

サブストリングが文字や他の単語で区切られている場合でも、複数のサブストリングを検索して結果を取得することは可能ですか?

4

2 に答える 2

6

これが私があなたが望むと思うことをする一つの方法です。

var results = new Array();
for ( var i = 0; i < querywords.length; i++ ) {
    var regex = new RegExp( 
        '(?=.*\\b' + querywords[i].split(' ').join('\\b)(?=.*\\b') + '\\b)', 'i'
    );
    for ( var j = 0; j < links.length; j++ ) {
        if ( regex.test( links[j].text ) ) {
            results.push( links[j].element );
        }
    }
}

たとえばquerywords、アイテムが含まれている場合"red sweet strawberries"regex作成されたものは

/(?=.*\bred\b)(?=.*\bsweet\b)(?=.*\bstrawberries\b)/i

同じ行に3つの単語を含む文字列がテストに合格するように、3つの肯定的な先読みが使用されます(単語の境界で囲まれている場合)。

デモ:JSFIDDLE

于 2013-03-19T17:48:18.473 に答える
0

私がこれを正しく理解している場合、全体の問題は次のとおりです。

var querywords = query.split(',');

クエリの例では、カンマはありません。だから私はこれが間違いだと思いますか?クエリをスペースで分割します。

var querywords = query.split(' ');
于 2013-03-18T23:23:35.913 に答える