Mavrikii
Platinum Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Nick3230 как то так Код: var filter = { 'title': ['[Обновлено]', 'Rss Guard'], 'size': { 'min': null, 'max': null } } function escapeRegExp(string) { return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); } function size2Bytes(size) { var m = (size + '').match(/([\d\.]+)\s*([gmk]?)b/i), s = {'g': Math.pow(1024, 3), 'm': Math.pow(1024, 2), 'k': 1024, '': 1}; if (m) return Math.ceil(m[1] * s[m[2].toLowerCase()]); else return null; } function parseTitle(title) { var m = title.match(/^(.*?)([\d\.]+\s*[gmk]?b)/i); if (m) return {'title': m[1], 'size': m[2]}; else return {'title': title, 'size': 0}; } function filterMessage() { var m = parseTitle(msg.title), r = new RegExp(filter.title.map(function(el) { return escapeRegExp(el); }).join('.*'), 'i'), s = size2Bytes(m.size); if (r.test(m.title)) { var passed = true; if (filter.size.min != null) { passed = s >= size2Bytes(filter.size.min); } if (filter.size.max != null && passed) { passed = s <= size2Bytes(filter.size.max); } if (passed) { msg.isImportant = true; return MessageObject.Accept; } else { return MessageObject.Ignore; } } else { return MessageObject.Ignore; } } | в size и min и max могут быть как цифрами (в байтах), так и строкой ('200 kb', к примеру). если выставлено в null, то не используется. |