2012-05-29 4 views

ответ

28

Если мы предположим, что расширение любой набор букв, цифр, подчеркивания или тире после последней точки в имени файла, то:

filename = filename.replace(/(\.[\w\d_-]+)$/i, '_large$1'); 
+0

не работает, если имя файла не имеет расширения, проверьте мой ответ ниже для решения, которое работает в ** все ** случаях –

4
var s = '../Course/Assess/Responsive_Course_1_1.png' 
s.replace(/\.png$/, '_large.png'); 

Это сделает работу. Кстати, здесь ночь. :)

UPDATE:

Более общий путь будет таким:

var s = '../Course/Assess/Responsive_Course_1_1.png'; 
s.replace(/(\.[^\.]+)$/, '_large$1'); 
+0

это работает только для файлов PNG – Porco

+2

, но это то, о чем он просил. Теперь, если бы я был вами, я бы сказал это: _yes, он попросил только png. Но он не сказал, что не хочет общего решения! Хорошо, я обновлю его. :) –

16

Использование Javascript LastIndexOf, что-то вроде:

var s = "Courses/Assess/Responsive_Cousre_1_1.png"; 
var new_string = s.substring(0, s.lastIndexOf(".")) + "_large" + s.substring(s.lastIndexOf(".")); 
+2

Этот метод работает быстрее, чем на основе регулярного выражения (не удивительно). Для 100000000 элементов: Regex: 41s lastIndexOf: 15s –

+0

Я предпочитаю это регулярному выражению, спасибо. – Dimitris

+0

@AntoineBolvy Спасибо за добавление этой информации. Мне любопытно, как вы протестировали это? – Buts

8

Ни один из ответов не работает, если файл не имеет расширения. Вот решение, которое работает для всех случаев.

function appendToFilename(filename, string){ 
    var dotIndex = filename.lastIndexOf("."); 
    if (dotIndex == -1) return filename + string; 
    else return filename.substring(0, dotIndex) + string + filename.substring(dotIndex); 
} 
Смежные вопросы