Regex для замены домена в ссылках, которые не являются изображениями - PullRequest
2 голосов
/ 17 марта 2010

Необходимо заменить доменное имя на все ссылки на странице, которые не являются изображениями или PDF-файлами. Это будет полная html-страница, полученная через прокси-сервис.

Example:
<a href="http://www.test.com/bla/bla">test</a><a href="/bla/bla"><img src="http://www.test.com" /><a href="http://www.test.com/test.pdf">pdf</a>
<a href="http://www.test.com/bla/bla/bla">test1</a>

Result:
<a href="http://www.newdomain.com/bla/bla">test</a><a href="/bla/bla"><img src="http://www.test.com" /><a href="http://www.test.com/test.pdf">pdf</a>
<a href="http://www.newdomain.com/bla/bla/bla">test1</a>

Ответы [ 3 ]

2 голосов
/ 17 марта 2010

Если вы используете .NET, я настоятельно рекомендую вам использовать HTML Agility Pack Прямой анализ с использованием регулярных выражений может быть очень подвержен ошибкам. Этот вопрос также похож на пост ниже.

Какое регулярное выражение следует использовать для удаления ссылок из кода HTML в C #?

0 голосов
/ 17 марта 2010

Если ни один из ваших pdf-адресов не имеет параметров запроса (например, a.pdf?asd=12), будет работать следующий код. Он заменяет только абсолютные и корневые ссылки.

var links = document.getElementsByTagName("a");
var len = links.length;
var newDomain = "http://mydomain.com";
/**
 * Match absolute urls (starting with http) 
 * and root relative urls (starting with a `/`)
 * Does not match relative urls like "subfolder/anotherpage.html"
 * */
var regex = new RegExp("^(?:https?://[^/]+)?(/.*)$", "i");
//uncomment next line if you want to replace only absolute urls
//regex = new RegExp("^https?://[^/]+(/.*)$", "i");
for(var i = 0; i < len; i++)
{
  var link = links.item(i);
  var href = link.getAttribute("href");
  if(!href) //in case of named anchors
    continue;
  if(href.match(/\.pdf$/i)) //if pdf
    continue;
  href = href.replace(regex, newDomain + "$1");
  link.setAttribute("href", href);
}
0 голосов
/ 17 марта 2010

Если домен http://www.example.com,, то нужно сделать следующее:

/http:\/\/www\.example\.com\S*(?!pdf|jpg|png|gif)\s/

При этом используется отрицательный прогноз, чтобы регулярное выражение соответствовало строке, только если строка не содержит pdf, png, jpg или gif в указанной позиции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...