Как вы видели, реализация логики ИЛИ в регулярном выражении довольно проста.Выполнение логики «И» немного более вовлечено.Для этого вы можете применить несколько положительных проверочных утверждений с позиции в начале строки.Чтобы проиллюстрировать, как это можно сделать, приведем прокомментированное регулярное выражение, написанное на PHP ...
if (preg_match(
'/# Match a string containing "word1" AND "word2" AND "word3".
^ # Anchor to start of string
(?=.*?\bword1\b) # Ensure there is a "word1" in string
(?=.*?\bword2\b) # AND ensure there is a "word2" in string
(?=.*?\bword3\b) # AND ensure there is a "word3" in string
/ix', $contents)) {
# Successful match. All the words are in the $contents string.
} else {
# Match attempt failed.
}
Далее все, что вам нужно сделать, это собрать аналогичное регулярное выражение с использованием Javascript.Вот функция фильтра AND:
function filter_AND(selector, query) {
query = query.split(/\s+/); // Array of words to be matched.
var len = query.length; // Save length for speed in loop.
var re_word = /^\w(?:.*\w)?$/; // Regex to validate a single word.
var regex = '^'; // Begin assempling our "AND" regex.
for (var i = 0; i < len; ++i) { // Loop adding each word to regex.
if (re_word.test(query[i])) { // If it begins and ends with '\w',
regex += '(?=.*?\\b' + query[i] + '\\b)'; // add word to regex.
}
}
regex = new RegExp(regex, 'i'); // Convert string to Regex object.
$(selector).each(function() {
($(this).text().search(regex) < 0) ?
$(this).hide().removeClass('visible') :
$(this).show().addClass('visible');
});
}
Надеюсь, это поможет!8 ^)