Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.10.2010, 08:52
Интересующийся
Отправить личное сообщение для SvetozarPNZ Посмотреть профиль Найти все сообщения от SvetozarPNZ
 
Регистрация: 26.10.2010
Сообщений: 16

Создание фильтра базы ссылок с помощью регулярных выражений
Есть два текстовых поля. В одном ссылки в другом маски. Как можно сделать фильтр ссылок, чтобы по заданным маскам удалялись лишние ссылки.
Пример.
База ссылок
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+ ссылок).

Есть ли идеи, решения?
Ответить с цитированием
  #2 (permalink)  
Старый 26.10.2010, 10:10
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 26,659

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>

Последний раз редактировалось рони, 26.10.2010 в 10:15.
Ответить с цитированием
  #3 (permalink)  
Старый 26.10.2010, 10:19
Интересующийся
Отправить личное сообщение для SvetozarPNZ Посмотреть профиль Найти все сообщения от SvetozarPNZ
 
Регистрация: 26.10.2010
Сообщений: 16

if (mass[k].search(/.ucoz./)!=-1)
 {
	mass.splice(k,1);
}

Вот это дает результат. Вижу-вижу недочеты. А как обойти их?

Блин! У меня тут еще вопросы появляются
Задался идеей парсить локально сохраненные страницы. А что-то во фрейм не подгружаются они. Вычитал такое:

function parsing(){
	document.getElementById('fr').location.href='яка/newsite.htm';
}
Ответить с цитированием
  #4 (permalink)  
Старый 26.10.2010, 10:20
Интересующийся
Отправить личное сообщение для SvetozarPNZ Посмотреть профиль Найти все сообщения от SvetozarPNZ
 
Регистрация: 26.10.2010
Сообщений: 16

Ой, да вы мне ответ написали. СПасииииибо! Я ж новичок на форуме не обратил внимание на кнопку
Ответить с цитированием
  #5 (permalink)  
Старый 26.10.2010, 10:40
Интересующийся
Отправить личное сообщение для SvetozarPNZ Посмотреть профиль Найти все сообщения от SvetozarPNZ
 
Регистрация: 26.10.2010
Сообщений: 16

рони,
Сообщение от рони
if (b[k] && b[k].search(a[i]) != -1) {
a[i] какого типа получился? Разве не строкового?..
b[k] это проверка существования элемента?
Ответить с цитированием
  #6 (permalink)  
Старый 26.10.2010, 15:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 26,659

SvetozarPNZ,
1.
var a = new Array(".ucoz.","narod.ru");
alert(typeof a[1]);

аргументом search может быть объект типа RegExp или строка
см. тут
2.да
Ответить с цитированием
  #7 (permalink)  
Старый 26.10.2010, 15:37
Интересующийся
Отправить личное сообщение для SvetozarPNZ Посмотреть профиль Найти все сообщения от SvetozarPNZ
 
Регистрация: 26.10.2010
Сообщений: 16

Сообщение от рони
аргументом search может быть объект типа RegExp или строка
Что же она у меня-то не работала. Когда я экспериментировал с
str1="/"+"filterbase[i]"+"/";
mass[k].search(str1)!=-1
Ответить с цитированием
  #8 (permalink)  
Старый 26.10.2010, 16:14
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 26,659

SvetozarPNZ,
1 массив mass никак не заполнен и в нём естественно ничего не найдёться
2 str1 = new RegExp(filterbase[i])
3. http://javascript.ru/RegExp
Ответить с цитированием
  #9 (permalink)  
Старый 28.10.2010, 12:15
Интересующийся
Отправить личное сообщение для SvetozarPNZ Посмотреть профиль Найти все сообщения от SvetozarPNZ
 
Регистрация: 26.10.2010
Сообщений: 16

Аха-ха. Точно. Я просто массив в своем скрипте еще раньше определил и у меня другой скрипт его заполнял. Получается, нужно было запустить сначала тот скрипт, чтобы массив был заполнен. Спасибо. Про str1 даже по справочнику я бы не догадался, что надо так делать.
Думал, что:
var re = /.ucoz./

тоже самое, что:
var re = '/'+'.ucoz.'+'/'
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создание текстового поля с помощью javascript mrDeko Общие вопросы Javascript 2 02.09.2010 20:07
Тестер регулярных выражений Riim Ваши сайты и скрипты 9 07.03.2010 08:21
Изменить таг с помощью регулярных выражений alexKniaz Общие вопросы Javascript 1 28.10.2008 16:38