簡體   English   中英

Greasemonkey-JavaScript中的正則表達式以更改鏈接

[英]Greasemonkey - regex in javascript to change links

我正在嘗試使用油脂猴子動態更改網頁的網址。

更改主題的示例:

<p><a rel="nofollow" href="http://site.com/goto/http_rapidshare_com_files_1401021221_SK_RG_X_FLAWL3SS_part01_rar/11609/107" rel="nofollow">http://rapidshare.com/files/1401021221/SK.RG.X.FLAWL3SS.part01.rar</a></p>
<p><a rel="nofollow" href="http://site.com/goto/http_rapidshare_com_files_3525685465_1_3_3_8_com_Parenthood_2010_S03E07_720p_HDTV_X264_DIMENSION_mkv/11598/51" rel="nofollow">http://rapidshare.com/files/3525685465/1-3-3-8.com_Parenthood.2010.S03E07.720p.HDTV.X264-DIMENSION.mkv</a></p>

GreaseMonkey腳本:

var els = document.getElementsByTagName("*");
for(var i = 0, l = els.length; i < l; i++) {
  var el = els[i];
   el.innerHTML = el.innerHTML.replace(/<p><a rel="nofollow" href=".*?" rel="nofollow">(.*?)<\/a><\/p>/img, '<p><a rel="nofollow" href="$1" rel="nofollow">$1</a><p>');
}

所需輸出:

<p><a rel="nofollow" href="http://rapidshare.com/files/1401021221/SK.RG.X.FLAWL3SS.part01.rar" rel="nofollow">http://rapidshare.com/files/1401021221/SK.RG.X.FLAWL3SS.part01.rar</a></p>
<p><a rel="nofollow" href="http://rapidshare.com/files/3525685465/1-3-3-8.com_Parenthood.2010.S03E07.720p.HDTV.X264-DIMENSION.mkv" rel="nofollow">http://rapidshare.com/files/3525685465/1-3-3-8.com_Parenthood.2010.S03E07.720p.HDTV.X264-DIMENSION.mkv</a></p>

基本上,上述正則表達式應將href( http://site.com/goto/http_rapidshare_com_files_1401021221_SK_RG_X_FLAWL3SS_part01_rar/11609/107 )更改為網址的可見文本( http://rapidshare.com/files/1401021221/SK.RG)。 X.FLAWL3SS.part01.rar ),但是由於某種原因卻沒有,為什么?

謝謝你們!
問候,
高球

精確定位鏈接。 正則表達式在嘗試解析HTML時非常脆弱。 偶數順序或空白的最小變化都會破壞它。

幸運的是,在這種情況下似乎不需要正則表達式。

這應該工作(未試用):

var rapidShareLinks = document.querySelectorAll ("a[href*='rapidshare']");
for (var J = rapidShareLinks.length - 1;  J >= 0;  --J) {
    var rsLink  = rapidShareLinks[J];
    rsLink.href = rsLink.textContent;
}

這是第一版問題的答案

對於第二版-只需使用Brock的答案即可(選擇)


這應該工作:

var els = document.getElementsByTagName("A");
for(var i = 0, l = els.length; i < l; i++) {
    var el = els[i];
    el.href = el.href.replace(/http:\/\/(.)+?\/(.)+?\//, '').replace(/\/.+/g, '').replace('http_', 'http://').replace(/_files_(\d+?)_/, '/files/$1/').replace(/_/g, '.');
}

請注意,我只匹配<a>標記,並直接解析其href屬性。

另外,由於它是一個示例腳本,因此它並不關心頁面上的其他鏈接,這些鏈接可能會在處理過程中被破壞;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM