仅用于相对链接的正则表达式

时间:2011-02-03 03:00:35

标签: javascript jquery regex

我正在创建一个javascript来检查DOM中的链接并更改那些不是绝对链接的链接。不幸的是我没有运气......

我想仅匹配下面的第一种链接,并添加文件夹路径

  1. <a href="somepage.html">link</a>
  2. <a href"http://somesite.net/somepage.html">link</a>
  3. 我使用string.replace(/a.+href="([^http]+)"/, 'path'+$1);无济于事......

    有人可以帮助我吗?提前谢谢。

6 个答案:

答案 0 :(得分:2)

如果您为了使用正则表达式解决问题而编写的正则表达式开始看起来有点过分,那么它可能有点过分。有时,与正则表达式结合使用的简单if语句可以创造奇迹:

$("a").each(function () {
    if (!/^http:\/\//.test(this.href)) {
        this.href = "http://example.com/folder/" + this.href; // etc.
    }
});

答案 1 :(得分:1)

您可能希望查看<base> html标记。它允许您设置所有链接和图像相对的路径。

http://www.w3schools.com/tags/tag_base.asp

http://www.w3.org/TR/html5/semantics.html#the-base-element

答案 2 :(得分:0)

您已使用方括号创建了一个字符类。删除它们。你想要一个“负面的背后”,请参阅下面的评论,了解语法信息。但并非所有语言都支持此正则表达式功能。

Javascript不支持lookbehind。这可能会有所帮助:http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript

答案 3 :(得分:0)

您可以使用

string.replace(/(a.+href=)"(?!http)(.+)"/gi, '$1"path/$2"')

答案 4 :(得分:0)

例如,我只是在其中创建了一个带有几个链接的变量。您可以轻松地调整.replace()以使用,但是您可以获得链接。

var content = '<a href="/somepage.html">link</a><a href="http://somesite.net/somepage.html">link</a><a href="somepage.html">link</a>';

// whatever you want to prefix link with
var base='http://somsite.net';

content = content.replace(/(href=")(?!https?:\/\/)([^"]*)/gi,'$1'+base+'/$2').replace(/\/+/g,'/');

答案 5 :(得分:0)

谢谢大家。

我只能使用以下语法替换相对路径:

var basepath = "pathto/";
var html = html.replace(/(<(a|img)[^>]+(href|src)=")(?!http)([^"]+)/g, '$1'+basepath+'$4');