2013-04-30 67 views
4

是否可以将target="_blank"添加到所有<a>标记中,只有一个正则表达式?我一直在试验负面和积极的前瞻/后面,无济于事。这应该:要向所有外部链接添加目标=“空白”的正则表达式

  • 匹配锚标签,其href开始与http://
  • 如果锚标记没有一个target标签,增加了一个target="_blank"标签
  • 如果它确实有一个target标签,它会检查target标签尚未设置为"_blank",如果不是被替换到target="_blank"

这可能吗?如果不是,那么执行此操作最少的计算密集型方法是什么?

+3

你试图从嵌入在HTML页面内的脚本(如JavaScript)的做到这一点还是你运行针对HTML文件的程序? – Liv 2013-04-30 12:54:07

+0

你想要一个正则表达式来设置一些东西?他们是不是习惯于将字符串与模式匹配? – engma 2013-04-30 12:54:33

+2

[正则表达式来解析(和修改)HTML?](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) – ssube 2013-04-30 12:56:21

回答

3

你没有真正指定这是否是来自DOM的html(等等)。假设你要修改的DOM ...使用jQuery,你可以做这样的事情:

$(document).ready(function() { 
    $('a').filter(function() { 
     return $(this).attr('href').substr(0, 7) == "http://"; 
    }).attr('target', '_blank'); 
}); 

这里是展示它的工作原理(您可以检查元素看到的jsfiddle的a的与href“ s开头http://target="_blank"):http://jsfiddle.net/amRrj/

+0

它最初的目标是服务器端和来自CMS的HTML。然而,这将被输出到一个页面,实际上我喜欢你通过JavaScript将计算推送到客户端的想法。 – 2013-04-30 13:49:12

1

如果HTML也是格式良好的XML,那么您最好使用支持xpath和xslt的XML工具。看看XMLStarlet,它提供了类似于grep,sed等的工具来处理XML。我认为这会做你想要什么,但我还没有尝试过:

xml ed -P -S -i //a -t attr -n target -v _blank somefile.html >somefile_2.html 

xml ed调用XMLStarlet编辑命令

-P保留格式

-S保存在空白

-i //a插入每个标签

-t attr插入类型是属性属性的

-n target名插入属性的

-v _blank值插入

对于更复杂的编辑,您可以使用XMLStarlet使用XSLT转换。

0

另一种选择是将target="_blank"添加到<base href…>。这将在全局影响页面<a>标签目标,而不是单独添加它们。目标声明<a>标签将覆盖此。

var target = '_self'; 

    if(external){ 
     target = '_blank'; 
    } 

    $('#base_tag').attr('target', target); 

Fiddle

<base> Documentation

相关问题