如何仅从Javascript的完整路径提取文件名和扩展名?

从API返回的文件路径如下:

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

我想提取文件名和扩展名,并替换所有ASCII表达式,例如%20。因此返回的最终结果应该是:

Corp_Data_Collection.pdf

关于如何使用JavaScript完成此操作的任何想法?

gsm174 回答:如何仅从Javascript的完整路径提取文件名和扩展名?

您可以使用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

大家都在问