Изменение формата некоторых строк

голоса
1

У меня есть строки в этом формате:

Puntata del 16 Agosto 2018
Puntata del 17 Gennaio 2018
Puntata del 7 Novembre 2017
Puntata del 2 Gennaio 2013

Я хотел бы получить:

20180816
20180117
20171107
20130102

Как я могу это сделать?

То есть год, месяц (две цифры) и день (две цифры).

За год это легко: просто взять последние четыре символа строки, но в течение дня и месяца?

Это код, который я творю:

var newName = function(oldName) {
    var oldNameWithoutPuntata = oldName.substring(12);
    console.log('oldNameWithoutPuntata:', oldNameWithoutPuntata);

    var year = oldNameWithoutPuntata.substr(oldNameWithoutPuntata.length - 4);
    console.log('year:', year);

    // ...
    return year + month + day;
}

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));
Задан 19/09/2018 в 13:35
источник пользователем
На других языках...                            


3 ответов

голоса
1

Можно удалить некоторые из подстрок нарезку , если вы используете RegExpфункцию , execкоторая может возвращать матч группы из запроса , хотя первый элемент будет "весь матч.

Если у вас есть массив дат деталей, снижая его обратно в строку в обратном порядке достигается с помощью reduceRightфункции массива.

Обратите внимание , что padStart является функцией строки , так что вы должны преобразовать числа в строки первым. Это достигается за счет объединения их с пустой строкой , т.е. ('' + <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));

Ответил 19/09/2018 в 18:02
источник пользователем

голоса
1

Для достижения ожидаемого результата, используйте ниже вариант поиска значения месяца от месяца имен массива

  1. Используйте Месяцы массив, чтобы найти значение месяца и отформатировать его, чтобы добавить «0», если она меньше 10
  2. Используя раскол (»«) метод с пространством, дата может расщепляется на дату, месяц, год
  3. Формат месяц, чтобы добавить «0», если она меньше 10

codepen для справки - https://codepen.io/nagasai/pen/QVzqPZ?editors=1011

var newName = function(oldName) {
  var oldNameWithoutPuntata = oldName.substring(12);
  
  var months = ['Gennaio','Febbraio','Marzo', 'Aprile','Maggio','Giugno', 'Luglio', 'Agosto','Settembre', 'Ottobre', 'Novembre','Dicembre']
  
  var dateArr = oldNameWithoutPuntata.split(' ')
  
  var month = months.indexOf(dateArr[1]) + 1 
  month = month< 10 ? ('0' + month) : month
  var year = dateArr[2];
  var date = dateArr[0]
  date = date< 10 ? ('0' + date) : date
 
  return year + month + date;
}

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

Ответил 19/09/2018 в 14:50
источник пользователем

голоса
0

Вы можете использовать padStart добавить 0 легко.

См https://codepen.io/anon/pen/bxOvmy?editors=1011

var newName = function(oldName) {
    var parseDate = oldName.split(' ');
    var monthsList = ['Gennaio','Febbraio','Marzo', 'Aprile','Maggio','Giugno', 'Luglio', 'Agosto','Settembre', 'Ottobre', 'Novembre','Dicembre'];

    var month = monthsList.indexOf(parseDate[3]) + 1;
    month = month.toString().padStart(2, "0");
    var year = parseDate[4];
    var date = parseDate[2].padStart(2, "0");
 
    return year + month + date;
}

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

Ответил 19/09/2018 в 16:59
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more