Можно удалить часть среза подстроки, если вы используете функцию RegExp
exec
, которая может возвращать группы совпадений из запроса, хотя первым элементом будет «полное совпадение».
Если у вас есть массив кусочков даты, его уменьшение до строки в обратном порядке достигается с помощью функции массива reduceRight
.
Обратите внимание, что padStart является функцией String, поэтому вам нужно преобразовать числав первую очередьЭто достигается путем объединения их с пустой строкой, т.е. ('' + <number>).padStart(...)
, и я использую скобки для обеспечения правильного порядка выполнения оператора
let getMonthAsNumber = month => ['Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre'].indexOf(month)+1
var newName = oldName => /^Puntata del ([0-9]+)\s([^0-9\s]+)\s([0-9]+)$/gi.exec(oldName)
// remove the first element of the match array - this is the whole match
.slice(1)
// use reduceRight to work along the rest of the match groups 'backwards'
// apend the strings together and convert/pad as required
.reduceRight((prev, cur) => prev + (''+(isNaN(cur)? // is 'cur' a string?
getMonthAsNumber(cur) // yes - convert month to number
:
cur // no - return number
))
.padStart(2, '0'), '')
var test1 = 'Puntata del 16 Agosto 2018';
var test2 = 'Puntata del 17 Gennaio 2018';
var test3 = 'Puntata del 7 Novembre 2017';
var test4 = 'Puntata del 2 Gennaio 2013';
console.log(test1, '-->', newName(test1));
console.log(test2, '-->', newName(test2));
console.log(test3, '-->', newName(test3));
console.log(test4, '-->', newName(test4));