是否可以仅使用一个正则表达式将 a 添加target="_blank"到所有标签?<a>我一直在尝试消极和积极的展望/落后,但无济于事。这应该:
- 匹配
href以http:// - 如果锚标签没有
target标签,则添加target="_blank"标签 - 如果它确实有
target标签,它会检查target标签是否尚未设置为"_blank",如果没有,则将其替换为target="_blank"
这可能吗?如果不是,那么计算量最小的方法是什么?
是否可以仅使用一个正则表达式将 a 添加target="_blank"到所有标签?<a>我一直在尝试消极和积极的展望/落后,但无济于事。这应该:
href以http://target标签,则添加target="_blank"标签target标签,它会检查target标签是否尚未设置为"_blank",如果没有,则将其替换为target="_blank"这可能吗?如果不是,那么计算量最小的方法是什么?
您并没有真正指定这是否是来自 DOM 的 html(除其他外)。假设您想修改 DOM... 使用 jQuery,您可以执行以下操作:
$(document).ready( function() {
$('a').filter( function() {
return $(this).attr('href').substr(0, 7) == "http://";
}).attr('target', '_blank');
});
这是一个 jsfiddle 显示它的工作原理(您可以检查元素以查看a's with ' 以havehref开头):http: //jsfiddle.net/amRrj/http://target="_blank"
如果 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要插入的属性值
对于更复杂的编辑,您可以使用带有 xslt 转换的 XMLStarlet。