Как реализована фильтрация адресов в блокировщиках рекламы? Для повышения навыков решил написать свой блокировщик рекламы. В интернете нашел список адресов вида: site1.ru *.site2.ru *.ru/ads/ и тд. Допустим я получаю адрес вида site.ru или thissite.site.ru или site.ru/ad/ или даже thissite.site.ru/ad/. Как мне проверить, подходит ли этот сайт под условия списка? Если каждый раз проверять перебором, то это займет много времени (в списке около 15000 строк). Была идея проверять с помощью ассоциативного массива, но это сработает только при полном совпадении.
Для реализации фильтрации адресов в блокировщике рекламы можно использовать регулярные выражения. Вы можете преобразовать адреса из списка в регулярные выражения и затем проверять адреса на соответствие этим выражениям.
Например, адрес ".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('Адрес разрешен'); }
Таким образом, вы можете эффективно фильтровать адреса с помощью регулярных выражений, не перебирая каждый раз весь список блокированных адресов.
Для реализации фильтрации адресов в блокировщике рекламы можно использовать регулярные выражения. Вы можете преобразовать адреса из списка в регулярные выражения и затем проверять адреса на соответствие этим выражениям.
Например, адрес ".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('Адрес разрешен');
}
Таким образом, вы можете эффективно фильтровать адреса с помощью регулярных выражений, не перебирая каждый раз весь список блокированных адресов.