【问题标题】:Greasemonkey - regex in javascript to change linksGreasemonkey - javascript 中的正则表达式来更改链接
【发布时间】:2011-12-20 19:06:16
【问题描述】:

我正在尝试使用greasemonkey 即时更改网页的网址。

要更改的主题示例:

<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) 更改为 URL 的可见文本 (http:/ /rapidshare.com/files/1401021221/SK.RG.X.FLAWL3SS.part01.rar)但由于某种原因它没有,知道为什么吗?

谢谢大家!
问候,
吊球

【问题讨论】:

    标签: javascript regex url greasemonkey replace


    【解决方案1】:

    这是对第一版问题的回答

    对于第二版 - 只需使用 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, '.');
    }
    

    请注意,我只匹配&lt;a&gt; 标签,并直接解析它们的href 属性。

    另外,因为它是一个示例脚本,它不关心页面上的其他链接,这些链接可能会在处理过程中被破坏;)

    【讨论】:

    • 感谢您的代码,但我无法正确处理所有链接,为了正常工作,它必须获取 url 的可见部分并将其设为 href。我已使用无效的新链接更新了问题。
    【解决方案2】:

    更精确地定位链接。正则表达式在尝试解析 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,哈哈。在问题中没有看到,页面上已经存在有效链接:D
    猜你喜欢
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    • 2012-09-21
    • 2017-02-27
    • 1970-01-01
    相关资源
    最近更新 更多