我正在拼命尝试使用多个关键字进行过滤。不知怎的,它没有按预期工作。例如,关键字组合: 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(“”);虽然不确定。我的实施没有用
答案 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');