如何在 JavaScript 的文件扩展名前插入文本?

How can I insert text before the file extension with JavaScript?

我有这样的图片网址

https://cdn.shopify.com/s/files/1/0919/5078/products/DSC_9782-processed_9bef16cb-7700-48d9-ad6d-f9a350e7f6c7.jpg?v=1579953393

我需要在文件扩展名前插入 _small 以获得该图像大小,它应该如下所示

https://cdn.shopify.com/s/files/1/0919/5078/products/DSC_9782-processed_9bef16cb-7700-48d9-ad6d-f9a350e7f6c7_small.jpg?v=1579953393

(图片可以有不同的文件扩展名。)

使用 JavaScript 执行此操作的最佳方法是什么?也许正则表达式?

尝试使用 this 正则表达式,但它不适用于文件扩展名后的 ?v=1579953393

一种方法是这样,您确定图像扩展名是 .jpg
然后你可以 split 字符串。

let str = 'https://cdn.shopify.com/s/files/1/0919/5078/products/DSC_9782-processed_9bef16cb-7700-48d9-ad6d-f9a350e7f6c7.jpg?v=1579953393';

let strArr = str.split('.jpg');

console.log(strArr[0]);

let newStr = `${strArr[0]}_small`;

console.log(newStr);

let url = `${newStr}.jpg${strArr[1]}`;

console.log(url);

晚上使用 URL interface 你可以做到这一点。

这应该对您有所帮助。您只需要添加每个可用于 fileTypes 数组的扩展类型。

const url = "https://cdn.shopify.com/s/files/1/0919/5078/products/DSC_9782-processed_9bef16cb-7700-48d9-ad6d-f9a350e7f6c7.jpg?v=1579953393";

const fileTypes = ['.jpg','.png']; //add each extension that you will use here.

const urlType = fileTypes.filter(type => url.search(type)> 0)[0];

let newUrl = urlType ? url.replace(urlType,`_small${urlType}`) : null;

console.log(newUrl)

let str = "https://cdn.shopify.com/s/files/1/0919/5078/products/DSC_9782-processed_9bef16cb-7700-48d9-ad6d-f9a350e7f6c7.jpg?v=1579953393";
let[filename, extension] = str.split('.jpg');

let rename = filename+'_small.'+extension;

console.log('New file name',rename);

希望对你有所帮助

您可以使用这个正则表达式:

((?:.+\/.+)+\/)(.?.+)+\.(.+)\?(.*)

var url = 'https://cdn.shopify.com/s/files/1/0919/5078/products/DSC_9782-processed_9bef16cb-7700-48d9-ad6d-f9a350e7f6c7.jpg?v=1579953393';
url = url.replace(/((?:.+\/.+)+\/)(.?.+)+\.(.+)\?(.*)/,"_small.?");
alert(url);

((?:.+\/.+)+\/) : matches text from starting to last slash (/) - protocol,host, and folders 
(.?.+)+         : filename 
\.              : Specific char . - before file extension
(.+)            : file extension
\?              : special character ? - starting of search params
(.*)            : search params

然后像这样替换组:

_small.?

我确实设法返工 this answer 来完成这项工作。它看起来像这样并且按预期工作。

image = 'https://cdn.shopify.com/s/files/1/0919/5078/products/DSC_9782-processed_9bef16cb-7700-48d9-ad6d-f9a350e7f6c7.jpg?v=1579953393';
image = image.replace(/(\.[\w\d?=_-]+)$/i, '_small');

我的解决方案并不总是最短或最优雅的,但是,我认为它们在可读性方面很重要。

我不喜欢上面解决方案的可扩展性和可读性,所以我写了这个函数:

append_to_file_name (file_name, str_to_append) {

    if (file_name && file_name.indexOf('.') >= 0) {

        let file_qs;
        let file_ext;
        let file_name_array = [];
        let file_q_index = file_name.indexOf('?');

        if (file_q_index >= 0) {

            file_qs = file_name.substring(file_q_index);
            file_name = file_name.substring(0, file_q_index);

        }

        file_name_array = file_name.split('.');
        file_ext = file_name_array.pop();

        file_name = (`${ file_name_array.join() }${ str_to_append }.${ file_ext }${ file_qs }`);

    }

    return file_name;

},