是否可以仅使用一个正则表达式将 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。