Создание фильтра базы ссылок с помощью регулярных выражений
Есть два текстовых поля. В одном ссылки в другом маски. Как можно сделать фильтр ссылок, чтобы по заданным маскам удалялись лишние ссылки.
Пример. База ссылок 441.vsemp.ru 52nnov.ucoz.ru 63sam.ucoz.ru 63tol.ucoz.ru 73.ucoz.ru 8999.ru anshum.narod.ru 905.ucoz.ru abon.net.ua база масок .ucoz. narod.ru Результат работы скрипта 441.vsemp.ru 8999.ru abon.net.ua Я пытался составлять регулярное выражение из строчного значения добавляя слэши, но не работает. Видимо не преобразуется строка в регекс. function filter(){ var mass = new Array(); var base = new Array(); var re = /[a-z0-9\.\-]+/gi; var str1; str = document.getElementsByName('base')[2].value; filterbase = str.match(re); for (i=0; i<filterbase.length; i++) { str1 = "/"+"filterbase[i]"+"/"; for (k=0; k<mass.length; k++) { if (mass[k].search(str1)!=-1) { mass.splice(k,1); } } } document.getElementsByName('base')[1].value = mass.join('\n'); } Я мог бы прогонять цикл по каждой строке текстового поля базы с целью найти подстроку-маску, но это значительно замедляет скрипт (ощутимо при 2000+ ссылок). Есть ли идеи, решения? |
SvetozarPNZ,
str1 = "/"+"filterbase[i]"+"/"; --- это лишнее mass.splice(k,1); -- это без k-- пропустит элемент массива и обратиться к несуществующему .... и ещё мелочи но Нажми на кнопку получишь результат ))) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> </head> <body> <textarea name="base" cols="30" rows="10">441.vsemp.ru 52nnov.ucoz.ru 63sam.ucoz.ru 63tol.ucoz.ru 73.ucoz.ru 8999.ru anshum.narod.ru 905.ucoz.ru abon.net.ua </textarea> <textarea name="mass" cols="30" rows="10">.ucoz. narod.ru </textarea> <textarea name="all" cols="30" rows="10"></textarea> <input type="button" name="go" value="go" onclick="filter()" /> <script language="JavaScript" type="text/javascript"> function filter() { var a = /[a-z0-9\.-]+/gi, c = document.getElementsByName("base")[0].value, b = c.match(a) || []; c = document.getElementsByName("mass")[0].value; a = c.match(a) || []; for (i = 0; i < a.length; i++) for (k = 0; k < b.length; k++) if (b[k] && b[k].search(a[i]) != -1) { b.splice(k, 1); k-- } document.getElementsByName("all")[0].value = b.join("\n") }; </script> </body> </html> |
if (mass[k].search(/.ucoz./)!=-1) { mass.splice(k,1); } Вот это дает результат. Вижу-вижу недочеты. А как обойти их? Блин! У меня тут еще вопросы появляются :write: Задался идеей парсить локально сохраненные страницы. А что-то во фрейм не подгружаются они. Вычитал такое: function parsing(){ document.getElementById('fr').location.href='яка/newsite.htm'; } |
Ой, да вы мне ответ написали. СПасииииибо! Я ж новичок на форуме не обратил внимание на кнопку:no:
|
рони,
Цитата:
b[k] это проверка существования элемента? |
SvetozarPNZ,
1. var a = new Array(".ucoz.","narod.ru"); alert(typeof a[1]); аргументом search может быть объект типа RegExp или строка см. тут 2.да |
Цитата:
str1="/"+"filterbase[i]"+"/"; mass[k].search(str1)!=-1 |
SvetozarPNZ,
1 массив mass никак не заполнен и в нём естественно ничего не найдёться 2 str1 = new RegExp(filterbase[i]) 3. http://javascript.ru/RegExp |
Аха-ха. Точно. Я просто массив в своем скрипте еще раньше определил и у меня другой скрипт его заполнял. Получается, нужно было запустить сначала тот скрипт, чтобы массив был заполнен. Спасибо. Про str1 даже по справочнику я бы не догадался, что надо так делать.
Думал, что: var re = /.ucoz./ тоже самое, что: var re = '/'+'.ucoz.'+'/' |
Часовой пояс GMT +3, время: 21:20. |