Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

90
Vistas
Agregar año si falta en Regex y Javascript

Obtengo la fecha completa del campo de date . Quería, si se encuentra la fulldate de fecha completa, usarla de lo contrario, usar el mes con palabras, en este caso el 29 de noviembre. En mi código a continuación, 2019 ya está allí, por lo que debe usarse.

La salida esperada debería ser como POR EJEMPLO

 2019-11-29T12:00:00.000Z 

 let date = "0 Hi Nov 29 HELLO - 29112019"; let months = "(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"; let regex = new RegExp(months + " \\d{1,2}(?: \\d{4})?"); const result = date.match(regex).match(/ \d{4}$/) ? date.match(regex).match(/ \d{4}$/) : moment( date.match(regex) + " " + new Date().getFullYear() ).toDate() || ""; console.log(result);
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Debe pasar la fecha en el formato reconocible .

Aquí hay una posible solución:

 let date = "0 Hi Nov 29 HELLO - 21112019"; let months = "(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"; let regex = new RegExp("(?:.*\\D)?((?:0?[1-9]|[12]\\d|3[01])(?:0?[1-9]|1[0-2])(?:19|20)\\d{2})|" + months + "\\s+(\\d{1,2})(?:\\s+(\\d{4}))?"); let match = date.match(regex); if (match) { if (match[1]) { console.log(moment(match[1], "DDMMYYYY").format("YYYY-MM-DD[T]HH:mm:ss[Z]")); } else { if (match[4] === undefined) { match[4] = new Date().getFullYear() } console.log(moment(`${match[2]} ${match[3]} ${match[4]}`, "MMM DD YYYY").format("YYYY-MM-DD[T]HH:mm:ss[Z]")); } }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>

Tenga en cuenta que el patrón se verá como (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+(\d{1,2})(?:\s+(\d{4}))? , y coincidirá con el nombre del mes en el Grupo 1, el día en el Grupo 2 y el año, si está presente, en el Grupo 3. \s+ coincide con uno o más espacios en blanco. Si el Grupo 3 no coincide, match[2] no estará definido y podrá reemplazarlo con el año actual.

El MMM significa el nombre del mes en la configuración regional establecida por moment.locale() .

Tenga en cuenta que el patrón que está utilizando no tiene límites en ambos lados y puede coincidir como parte de una subcadena más larga. Por lo tanto, tiene sentido hacerlo más preciso al menos con límites de palabras:

 let regex = new RegExp("\\b" + months + "\\s+(\\d{1,2})(?:\\s+(\\d{4}))?\\b");

O bien, con un límite de palabra al principio y un (?!\d) anticipado al final (para asegurarse de que no haya otros dígitos después del día/año):

 let regex = new RegExp("\\b" + months + "\\s+(\\d{1,2})(?:\\s+(\\d{4}))?(?!\\d)");
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda