Regex在javascript中重新排序日期的部分



我有一个日期和该日期的格式,由用户给出。(本例中使用d.m.y yyyy和15.10.2021)

从这个格式中,我需要得到年、月、日的位置,这样我就可以在日期上使用那个位置。

const year = /y{4}|y{2}/.exec(format);
const month = /m{1,2}/.exec(format);
const day = /d{1,2}/.exec(format);
const yearVal = date.substring(year.index, year.index + year[0].length);

问题是格式只有一个字母,但我的日期有两个数字。(d、15)所以我得到0.20而不是2021我怎么能改变这与所有不同的格式工作?

可以在这里看到所有可能的格式:node-dateformat

例如:"d"one_answers";dd"是这样的:

"d"以数字表示的月份的日期;对于个位数的天数,没有前导零。

"dd"以数字表示的月份的日期;个位数天数的前导零。

您可以从这样的模式生成一个正则表达式:

format.replace(/([ymd])1*/g, (match, ymd) => `(?<${ymd}>${'\d'.repeat(match.length)})`);

yyyy-mm-dd将变成/(<?y>dddd)-(<?m>dd)-(<?d>dd)/,然后您可以使用组名提取年/月/日:

function getDates(format, date) {
const regex = new RegExp(format.replace(/(w)1+|(w)/g, ({length}, w, s) => `(?<${w||s}>${s ? '\d+' : '\d'.repeat(length)})`));
const result = date.match(regex);
if(result) {
const { y: year, m: month, d: day } = result.groups;
return { year, month, day };
}
}

console.log(getDates('yyyy-mm-dd', '2021-10-15'));
console.log(getDates('dd/mm/yyyy', '15/10/2021'));
console.log(getDates('mm-dd-yy', '10-15-21'));
console.log('----');
console.log(getDates('yyyy-m-d', '2021-9-15'));
console.log(getDates('yyyy-m-d', '2021-10-6'));

另一个拆分格式的选项&值,查找y/m/d在各自的索引

const lookup = ( format, value ) => {
const f = format.split(/(m+|d+|y+)/).filter(Boolean);
const v = value.split(/(D+)/).filter(Boolean);
return [
v[f.findIndex(i => i.startsWith('y'))],
v[f.findIndex(i => i.startsWith('m'))],
v[f.findIndex(i => i.startsWith('d'))]
];
}
console.log(lookup('d.m.yyyy', '10.5.2021'));
console.log(lookup('d.m.yyyy', '10.12.2021'));
console.log(lookup('dd.mm.yyyy', '10.05.2021'));

相关内容

  • 没有找到相关文章

最新更新