Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 仅用于相对链接的正则表达式_Javascript_Jquery_Regex - Fatal编程技术网

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

Javascript 仅用于相对链接的正则表达式,javascript,jquery,regex,Javascript,Jquery,Regex,我正在创建一个javascript来检查DOM中的链接,并更改那些不是绝对链接的链接。不幸的是我没有任何运气 我只想匹配下面的第一类链接,并添加文件夹路径 我使用了string.replace(/a.+href=“([^http]+)”/,'path'+$1)无效 有人能帮我吗?提前感谢。您已经创建了一个带有方括号的字符类。移除它们。如果您想要一个“负面回顾”,请参阅下面的注释以了解有关语法的信息。但并非所有语言都支持此正则表达式功能 Javascript不支持查找。这可能会有所帮助:您可能

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

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

  • 我使用了
    string.replace(/a.+href=“([^http]+)”/,'path'+$1)无效


    有人能帮我吗?提前感谢。

    您已经创建了一个带有方括号的字符类。移除它们。如果您想要一个“负面回顾”,请参阅下面的注释以了解有关语法的信息。但并非所有语言都支持此正则表达式功能


    Javascript不支持查找。这可能会有所帮助:

    您可能需要查看
    html标记。它允许您设置所有链接和图像的相对路径

    您可以使用

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

    例如,我刚刚创建了一个带有几个链接的变量。您可以很容易地调整.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,'/');
    
    var内容=”;
    //无论你想用什么作为链接的前缀
    var base=http://somsite.net';
    content=content.replace(/(href=“)(?!https?:\/\/)([^“]*)/gi,$1'+base+'/$2')。replace(/\/+/+/g'/');
    
    如果您编写的仅使用正则表达式解决问题的正则表达式开始看起来像是过度使用,那么它可能是过度使用。有时,与正则表达式结合使用的一个简单的
    if
    语句可以产生奇迹:

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

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

    var basepath = "pathto/";
    var html = html.replace(/(<(a|img)[^>]+(href|src)=")(?!http)([^"]+)/g, '$1'+basepath+'$4');
    
    var basepath=“pathto/”;
    var html=html.replace(/(]+(href | src)=”([^“]+)/g,“$1'+基本路径+“$4”);
    
    但是,如果不使用括号和插入符号,我怎么能否定href属性中的“http”呢?我认为应该使用“负查找”。我不确定javascript是否支持负前瞻。您想解决的总体问题是什么?我觉得可能有一个更简单的解决方案来解决您的问题。基本上我想要的是有一个正则表达式,它只检查链接标记中的相对路径,因此避免绝对URL。所以这个正则表达式只替换相对路径,避免绝对URL?它查找href=“然后将所有内容匹配到下一个”,但前提是href=“后面的内容不是以http://或https://开头,如果找到它,它将使用该基变量中的任何内容作为url的前缀。另外还有一个replace(),用于替换可能发生的double/,例如,如果相对url以a/vs.not开头,则会出现这种情况。