Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

224
Visualizações
Regex para reordenar partes de la fecha en javascript

Tengo una fecha y un formato para esa fecha, dado por el usuario. (dmyyyy y 15.10.2021 utilizados para este ejemplo)

A partir de ese formato, necesito obtener la posición del año, mes y día, para poder usar esa posición en la fecha.

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

El problema con esto es que el formato tiene 1 letra, pero mi fecha tiene 2 números. (d y 15). Así que obtengo 0.20 en lugar de 2021 ¿Cómo puedo cambiar esto para que funcione con todos los formatos diferentes?

Puedes ver todos los formatos posibles aquí: node-dateformat

Por ejemplo: la diferencia entre "d" y "dd" es así:

"d" Día del mes como dígitos; sin cero inicial para días de un solo dígito.

"dd" Día del mes como dígitos; cero inicial para días de un solo dígito.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Podría generar una expresión regular a partir del patrón como este:

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

yyyy-mm-dd se convertirá en /(<?y>\d\d\d\d)-(<?m>\d\d)-(<?d>\d\d)/ , luego puede extraer el año/mes/día usando nombres de grupo:

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

about 4 years ago · Juan Pablo Isaza Relatório

0

Otra opción aquí para dividir el formato y el valor, busque a/m/d en el índice respectivo

 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('dmyyyy', '10.5.2021')); console.log(lookup('dmyyyy', '10.12.2021')); console.log(lookup('dd.mm.yyyy', '10.05.2021'));
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda