[英]regular expression to add a target="blank" to all external links
是否可以僅使用一個正則表達式將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
的href
是以http://
開頭的,具有target="_blank"
): http : //jsfiddle.net/amRrj/
如果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
每個標簽-i //a
插入
-t attr
insert type是屬性
-n target
要插入的屬性的-n target
名稱
-v _blank
要插入的屬性值
對於更復雜的編輯,您可以將XMLStarlet與xslt轉換一起使用。
我寫這個也許有幫助:
正則表達式:/<a(.*?)href="(.*?)"(.*?)>(.*?)<\/a>/ /<a(.*?)href="(.*?)"(.*?)>(.*?)<\/a>/gi
console.log(`<a href="https://www.stackoverflow.com/test" target="_parent">Stackoverflow</a>`.replace(/<a(.*?)href="(.*?)"(.*?)>(.*?)<\/a>/gi, '<a href="$2" target="_blank">$4</a>')); console.log(`<a href="https://www.stackoverflow.com/test" target="_target">Stackoverflow</a>`.replace(/<a(.*?)href="(.*?)"(.*?)>(.*?)<\/a>/gi, '<a href="$2" target="_blank">$4</a>')); console.log(`<a href="https://www.stackoverflow.com/test">Stackoverflow</a>`.replace(/<a(.*?)href="(.*?)"(.*?)>(.*?)<\/a>/gi, '<a href="$2" target="_blank">$4</a>'));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.