return filename.split('.').pop();
Будьте проще :)
Edit:
Это еще одно решение без регулярных выражений, которое я считаю более эффективным:
return filename.substring(filename.lastIndexOf('.')+1, filename.length) || filename;
Есть некоторые угловые случаи, которые лучше обрабатываются ответом VisioN ниже, особенно файлы без расширения (.htaccess
и т. Д. Включены).
Это очень производительно и обрабатывает угловые случаи, возможно, лучшим способом, возвращая ""
вместо полной строки, когда нет точки или нет строки перед точкой. Это очень хорошо продуманное решение, хотя и сложное для чтения. Вставьте его в свою библиотеку помощников и просто используйте его.
Старый Редактировать:
Более безопасная реализация, если вы собираетесь запускать файлы без расширения или скрытые файлы без расширения (см. Комментарий VisioN к ответу Тома выше), что-то вроде этого
var a = filename.split(".");
if( a.length === 1 || ( a[0] === "" && a.length === 2 ) ) {
return "";
}
return a.pop(); // feel free to tack .toLowerCase() here if you want
Если a.length
один, это видимый файл без расширения, т.е. файл
Если a[0] === ""
и a.length === 2
, то это скрытый файл без расширения, т.е. .htaccess
Надеюсь, это поможет решить проблемы с немного более сложными случаями. С точки зрения производительности, я считаю, что это решение немного медленнее, чем регулярное выражение в большинстве браузеров. Тем не менее, для наиболее распространенных целей этот код должен быть полностью применим.