Как реализована фильтрация адресов в блокировщиках рекламы? Для повышения навыков решил написать свой блокировщик рекламы. В интернете нашел список адресов вида:
site1.ru
*.site2.ru
*.ru/ads/ и тд.
Допустим я получаю адрес вида site.ru или thissite.site.ru или site.ru/ad/ или даже thissite.site.ru/ad/.
Как мне проверить, подходит ли этот сайт под условия списка? Если каждый раз проверять перебором, то это займет много времени (в списке около 15000 строк). Была идея проверять с помощью ассоциативного массива, но это сработает только при полном совпадении.

21 Авг 2019 в 06:27
179 +1
0
Ответы
1

Для реализации фильтрации адресов в блокировщике рекламы можно использовать регулярные выражения. Вы можете преобразовать адреса из списка в регулярные выражения и затем проверять адреса на соответствие этим выражениям.

Например, адрес ".site2.ru" можно преобразовать в регулярное выражение "/^..site2.ru$/i", а адрес ".ru/ads/" в "/^..ru\/ads\/.*$/i". Затем вы можете создать массив регулярных выражений и проверять входящие адреса на соответствие каждому из них.

Пример кода на JavaScript:

const blockedAddresses = [
/^site1\.ru$/i,
/^.*\.site2\.ru$/i,
/^.*\.ru\/ads\/.*$/i
];
function isAddressBlocked(address) {
for (let i = 0; i < blockedAddresses.length; i++) {
if (blockedAddresses[i].test(address)) {
return true;
}
}
return false;
}
// Проверка адреса
const address = 'thissite.site2.ru';
if (isAddressBlocked(address)) {
console.log('Адрес заблокирован');
} else {
console.log('Адрес разрешен');
}

Таким образом, вы можете эффективно фильтровать адреса с помощью регулярных выражений, не перебирая каждый раз весь список блокированных адресов.

20 Апр 2024 в 13:18
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир