@ZaxapKramer
Больной верстальщик

Как правильно получить расширение файла из специфической url-строки?

Имеются строки вида:
var string1 = "http://fs2.www.anyone.com/some/153983289/123456789.png%4E800";
var string2 = "https://img2.someone.com/any/1920x1080/d/ad/my-super-image.jpg?id=file.png";
var string3 = "http://supersite.com/gipersuperimage";


Необходимо получить расширение изображения (только буквы, чисел быть не должно, по идее).
Естественно, string.split(".").pop() не подходит (как и подобные варианты). Немного подумал и решил сделать выбор в пользу регулярки.

var regexp = /.*\.(\w+)[^?/]+$/;

string1.replace(regexp, "$1"); // Ожидание: png | Реальность: png
string2.replace(regexp, "$1"); // Ожидание: jpg | Реальность: png
string3.replace(regexp, "$1"); // Ожидание:     | Реальность: http://www.supersite.com/gipersuperimage


Как, все же, получить расширение из строк такого вида правильно? Спасибо.
  • Вопрос задан
  • 278 просмотров
Решения вопроса 2
lazalu68
@lazalu68
Salmon
Если в самом простом варианте, то наверное просто стоит разбивать строку по слешам, и последнюю строку получившегося массива разбивать еще по точке:
url = decodeURIComponent( "http://fs2.www.anyone.com/some/153983289/123456789.png%4E800" );
last_part_of_url = url.substring(url.lastIndexOf('/') + 1);
if (last_part_of_url.indexOf('.') !== -1) {
	console.log(last_part_of_url.substring(last_part_of_url.lastIndexOf('.') + 1));
}

В большинстве случаев когда такое бывает нужно, впоследствии еще бывает нужно получать полную информацию об URI, Steven Levithan когда-то делал это так.

Регуляркой то же самое как-то так:
var r = /^((http[s]?|ftp):\/)?\/?([^:\/\s]+)((\/\w+)*\/)([\w\-\.]+[^#?\s]+)(.*)?(#[\w\-]+)?$/,
    s = "http://fs2.www.anyone.com/some/153983289/123456789.png%4E800";

console.log( r.exec(decodeURIComponent(s))[6] );
// "123456789.pngN800"
Ответ написан
Комментировать
ThunderCat
@ThunderCat Куратор тега JavaScript
{PHP, MySql, HTML, JS, CSS} developer
Имхо если расширения у вас только от изображения - проще сравнить вхождение подсторки из массива возможных. Это решение "в лоб", но зато гарантирует результат, например разбить строку слешами, взять последний результат, разбить точкой, в последнем проверить на подстроку в строке по очереди все возможные расширения. Profit.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы