如何重写URL的一部分?

How to rewrite part of a URL?

我在我的网站上使用 lightbox2,我希望我的观众下载图片。该按钮有效,它链接到 /view/directory/image.jpg 并且下载按钮仅显示图像。在PHP我做了一个下载图片的脚本,在mysql设置download+1,我唯一不太擅长的是JS。

lightbox2 中的当前 JS 代码是:

this.$lightbox.find('.lb-download').on('click', function (e) {
    window.open(e.target.href)
  });

链接到 /view/directory/image.jpg 因为 href 会显示图片。 我希望 lb-download 按钮转到 /download/directory/image.jpg,我已经可以下载了,只是不是window.open 和 preg_replace 部分在 JS 中。

url=e.target.href;
url=url.split("/");
url[0]=url[0]+"/download";
url.join("/");
window.open(url);

你得到了包含 "domain.com/view/directory/image.jpg"e.target.href,你需要它包含 "domain.com/download/directory/image.jpg"所以你必须这样做:

JS:

let dwHref = e.target.href;
dwHref = dwHref.split("/");
dwHref[1] = "download";
dwHref.join("/");
window.open(dwHref);

这会将 e.target.href 转换为数组,然后将 "view" 交换为 "download"(数组中的位置 1),然后打开 window...

您可以简单地用 download 替换单词 view 通过 运行 以下 -

var urlToBeOpened = e.target.href.replace('view', 'download');
window.open(urlToBeOpened);

您可以将url中的部分替换为查看下载,如下所示:

this.$lightbox.find(".lb-download").on("click", function (e) {
   window.open(e.target.href.replace("/view/", "/download/"))
});

解决这个问题的另一种方法是使用模式和替换函数

制作类似

的图案
var pattern = /view/ig; 

然后假设我们有一个像

这样的字符串
var a = "domain.com/view/directory/image.jpg";

现在只需使用替换,我们就可以替换 URL

中的任何单词
a = a.replace( pattern, "download" );

这里有一个例子https://jsfiddle.net/mhadaily/0zpekx6t/1/

注意:您可以轻松地将 a 更改为 e.target.href 并对其应用替换功能。

注意:上面模式中的 i 标志表示单个,g 标志使该全局应用。

更多信息请阅读:https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions