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

192
Visualizações
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 Respostas
Responde à pergunta

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