需要替换页面上不是图像或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>
答案 0 :(得分:2)
如果您使用的是.NET,我强烈建议您使用HTML Agility Pack 使用正则表达式进行直接解析可能非常容易出错。这个问题也与下面的帖子类似。
What regex should I use to remove links from HTML code in C#?
答案 1 :(得分:0)
如果域名为http://www.example.com,则应遵循以下规则:
/http:\/\/www\.example\.com\S*(?!pdf|jpg|png|gif)\s/
如果字符串在指定位置不包含pdf,png,jpg或gif,则使用负前瞻来确保正则表达式匹配字符串。
答案 2 :(得分:0)
如果您的pdf网址都没有查询参数(例如a.pdf?asd=12
),则以下代码将起作用。它仅替换绝对和根相对URL。
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);
}