如何使用JavaScript在文件扩展名之前插入文本



我有类似的图像URL

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实现这一点的最佳方法是什么?也许是Regex?

尝试使用此Regex,但它不适用于文件扩展名之后的?v=1579953393

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);

希望它能帮助你。

您可以使用此Regex:

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

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(/((?:.+/.+)+/)(.?.+)+.(.+)?(.*)/,"$1$2_small.$3?$4");
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

然后替换组,如:

$1$2_small.$3?$4

一种方法可以是这样,您可以确定图像扩展名为.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界面就可以实现这一点。

这应该会对您有所帮助。您只需要添加每个可以用于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)

我确实设法修改了这个答案来完成这项工作。它看起来是这样的,而且工作正常。

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(/(.[wd?=_-]+)$/i, '_small$1');

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

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

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;
},

最新更新