小弟近来使用Teleport Pro软件下载一个纯html的静态网站(嗯,不知道称呼它为静态网站是否合适,先这样将就着吧).下载下来之后,发现里面多了好多的冗余信息,例如下面的片断…
<a href="javascript:if(confirm('http://www.todayonhistory.com/7/24/ZhiTianXiaJiang-YeLvChuCaiDanChen.html \n\n文件并未依 Teleport Pro 取回,因为 它的域或路径超过开始网址中设置的范围。 \n\n你要从服务器上打开它吗?'))window.location='http://www.todayonhistory.com/7/24/ZhiTianXiaJiang-YeLvChuCaiDanChen.html'" tppabs="http://www.todayonhistory.com/7/24/ZhiTianXiaJiang-YeLvChuCaiDanChen.html">
现在要求将这个片断中只保留<a href="/7/24/ZhiTianXiaJiang-YeLvChuCaiDanChen.html">请教用正则表达式如何实现这个目标?注意:红色部分的代码是不固定的
<a href="javascript:if(confirm('http://www.todayonhistory.com/7/24/ZhiTianXiaJiang-YeLvChuCaiDanChen.html \n\n文件并未依 Teleport Pro 取回,因为 它的域或路径超过开始网址中设置的范围。 \n\n你要从服务器上打开它吗?'))window.location='http://www.todayonhistory.com/7/24/ZhiTianXiaJiang-YeLvChuCaiDanChen.html'" tppabs="http://www.todayonhistory.com/7/24/ZhiTianXiaJiang-YeLvChuCaiDanChen.html">
现在要求将这个片断中只保留<a href="/7/24/ZhiTianXiaJiang-YeLvChuCaiDanChen.html">请教用正则表达式如何实现这个目标?注意:红色部分的代码是不固定的
是要将<a href="javascript:if(confirm('http://www.todayonhistory.com/7/24/ZhiTianXiaJiang-YeLvChuCaiDanChen.html 替换成<a href="/7/24/ZhiTianXiaJiang-YeLvChuCaiDanChen.html">么?去掉前面冗余的javascript:if(confirm(' 是否这个意思?
<html>
<head>
<script language="javascript">
window.onload=function(){
var str=document.body.innerHTML;
var a;
var rex=/(<a\s.*?\s?href\s*=)\s*['|"]?[^\s'"]+[\s'"]+(http:\/\/).*?\/(.*?.html).*?[\s'"](>)+/igm;
if( rex.test(str)){
a=str.replace(rex,"$1 $2 $3 $4");
}
alert(a);
}
</script>
</head>
<body >
<a href="javascript:if(confirm('http://www.todayonhistory.com/7/24/ZhiTianXiaJiang-YeLvChuCaiDanChen.html 文件并未依 Teleport Pro 取回, 它的域或路径超过开始网址中设置的范围。 \n\n你要从服务器上打开它吗?'))"></a> </body>
</html>
分三步来:
第一步:匹配tppabs标签:
\btppabs="h[^"]*"
替换为
(空)
第二步:匹配window.location标签:
window.location='http://www.todayonhistory.com(.+?)\.htm'"
替换为(空)
第三步:匹配javascript代码:
href="javascript:if\(confirm\('http://www.todayonhistory.com(.+?)\.htm
替换为
href="../..$1.htm"