您可以使用JavaScript的URL
构造函数从URL中获取路径名,如下所示:
const url = new URL("https://yourlongurl.com/something/yourfile.pdf");
const pathname = url.pathname;
然后从路径名中使用substring
提取路径的最后一部分,如下所示:
const filename = unescape(pathname.substring(pathname.lastIndexOf('/') + 1));
这将返回"yourfile.pdf"
,
我最终得到的解决方案:
file = file_path.replace(/ ^(?:[^ /?] /)([^ /?] )。 / g,function(a, b){return unescape(b);});
,
let link =
"https://my-bucket.s3.amazonaws.com/media/private/files/Corp%20Data%20Collection.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA6FUWELJHGJHGLIJI4Hss2F20191204%2Fca-central-1%2Fs3%2Faws4_request&X-Amz-Date=20191204T185901Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=2a227681a180d8785be4edfa9e15dkjhsdkjs8796937182d9c33fc12a0e52affe97";
let regex = link.match(/.+?(?=\?)/)[0].split("/");
console.log(decodeURIComponent(regex[regex.length - 1]));
// Corp Data Collection.pdf
/.+?(?=\?)/
此正则表达式将匹配任何字符,直到字符“?”为止找到(不包括此字符)。
然后,获取第一个匹配的元素并将字符串拆分为数组(使用“ /”)。
然后,解码数组的最后一个元素
,
如果要使用RegEx显式地执行此操作,可以使用此RegEx:
\/([^\/]*\.[^\/]*)\?
\/
从字面上匹配一个(正斜杠)。
[^\/]*
匹配除斜线以外的所有字符0+次。
\.
从字面上匹配.
。
[^\/]*\.[^\/]*
周围的括号使该组不匹配。
\?
从字面上匹配?
。
您可以使用以下JS代码:
const regex = /\/([^\/]*\.[^\/]*)\?/gm;
const str = `https://my-bucket.s3.amazonaws.com/media/private/files/Corp%20Data%20Collection.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA6FUWELJHGJHGLIJI4Hss2F20191204%2Fca-central-1%2Fs3%2Faws4_request&X-Amz-Date=20191204T185901Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=2a227681a180d8785be4edfa9e15dkjhsdkjs8796937182d9c33fc12a0e52affe97`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match,groupIndex) => {
console.log(`Found match,group ${groupIndex}: ${match}`);
});
}
本文链接:https://www.f2er.com/2975195.html