RegExp / Jquery / Isotope按关键字搜索和过滤:不使用某些关键字组合,为什么?

时间:2015-01-03 16:09:20

标签: javascript jquery regex jquery-isotope

我正在拼命尝试使用多个关键字进行过滤。不知怎的,它没有按预期工作。例如,关键字组合: laurene maria 有效但 laurene maria ben laurene ben laurene clara 等等不起作用。我有什么不对的?

http://fiddle.jshell.net/7t8mgont/18/

var $quicksearch = $('#quicksearch').keyup( debounce( function() {
  qsRegex = new RegExp( $quicksearch.val(), 'gi' );
    $container.isotope({
        filter: function() {
            return qsRegex ? $(this).text().match( qsRegex ) : true;
          }
    });
}) );

以上是整个代码的基本部分。我还为你添加了一个功能齐全的JSFiddle。

我很感激一些见解。

编辑:我在想str.split(“”);虽然不确定。我的实施没有用

2 个答案:

答案 0 :(得分:1)

已经有一年的帖子和非常丑陋的javascript但是如果有人搜索它,那个想法就在那里;)

我从组合过滤器(http://codepen.io/desandro/pen/mCdbD)中获取了这个想法,但结合了多个正则表达式。 laurene maria maria laurene 正在运作

jQuery('.quicksearch').keyup(function () {
    $grid.isotope({
        filter: function () {
            var qsRegex = [];
            var resultRegex = [];
            var endResult = new Boolean();
            var searchID = jQuery('.quicksearch').val();
            var searchTable = searchID.split(" ");
            for (var i = 0; i < searchTable.length; i++) {
                qsRegex[i] = new RegExp(searchTable[i], 'gi');
                resultRegex[i] = qsRegex[i] ? jQuery(this).text().match(qsRegex[i]) : true;
                endResult = endResult && resultRegex[i];
            }
            return endResult;
        }
    });
});

答案 1 :(得分:0)

嗯,你有几个选择。

假设您只需要连续匹配单词,例如 laurene ben 而不是 ben laurene ,你可以将简单的正则表达式引入字符串。你完全正确str.split(' ')。因此,要匹配连续跟随的任何单词并允许其他单词介于目标字符串之间,请使用:

var regexVal = $quicksearch.val().split(/\s+/).join('\\b.*');
qsRegex = new RegExp(regexVal, 'gi');

我使用.split(/\s+/)来匹配任意数量的连续空格。 \\b确保整个单词匹配。如果您希望用户能够在任何单词中键入任意数量的字符,那么请将其取出:

var regexVal = $quicksearch.val().split(/\s+/).join('.*');
qsRegex = new RegExp(regexVal, 'gi');

JSFiddle Here