我有以下格式的字符串:
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));
答案 0 :(得分:1)
要获得预期的结果,请使用下面的从月份名称数组中查找月份值的选项
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));
答案 1 :(得分:1)
如果您使用RegExp
函数exec
,尽管第一个元素将是“ whole match”,但可以从查询返回匹配组,则可以删除一些子字符串切片。
一旦有了日期片段数组,就可以通过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));
答案 2 :(得分: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));