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

193
Vistas
Matriz de filtro con expresión regular de coincidencia que solo devuelve la primera coincidencia (javascript)

Tengo que filtrar y asignar una matriz de cadenas a otra matriz, el problema es que solo coincide con la primera coincidencia y la otra cadena no coincide cuando debería porque probé el apttern en regex101 y funcionó.

Tengo un objeto llamado 'pilas' con múltiples variables, para simplificar solo escribo el que me interesa (stackName). objeto "pilas":

 [ { "stackName": "cc-dev-euw1d-c-1" }, { "stackName": "ngi-prd-euw1b-c-3" } ]

Hice el siguiente código para poder filtrar y mapear este objeto "apilado" en otra matriz agregando una cadena "ninguno" al principio y luego filtrándolo con un patrón de expresiones regulares que mira si la letra al final antes del número es un ' C':

 this.oldstacks = ['none', ...stacks .filter(stack => stack.stackName.match('c(?=-\d)')) .map(stack => stack.stackName)];

Por ejemplo, estas cadenas deben coincidir:

 cc-dev-agw1d-c-1 dd-prd-agw1b-c-3

Pero estos no coinciden, porque no tienen una "c" antes del número:

 dd-prd-agw1b-d-3 dd-prd-agw1b-r-3

Me gustaría filtrar el objeto stacks en los objetos oldStacks para que solo tome la cadena que coincida con el patrón, pero parece que no puedo averiguar cómo porque de esta manera solo toma la primera coincidencia y me gustaría todas las coincidencias de las pilas.

Gracias

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

El problema es que la coincidencia toma una expresión regular en lugar de una cadena, y puede usar una coincidencia solo en lugar de la afirmación de búsqueda anticipada.

 const stacks = [{ "stackName": "cc-dev-euw1d-c-1" }, { "stackName": "ngi-prd-euw1b-c-3" } ]; const oldstacks = ['none', ...stacks .filter(stack => stack.stackName.match(/c-\d/)) .map(stack => stack.stackName) ]; console.log(oldstacks);

En lugar de primero filtrar y luego mapear, también puede usar reduce:

 const stacks = [{ "stackName": "cc-dev-euw1d-c-1" }, { "stackName": "ngi-prd-euw1b-c-3" } ]; const oldstacks = ['none', ...stacks .reduce((acc, curr) => { if (/c-\d/.test(curr.stackName)) acc.push((curr.stackName)) return acc; }, []) ]; console.log(oldstacks);

about 4 years ago · Santiago Trujillo 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