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

140
Visualizações
¿Cómo accede a los grupos de match/matchAll como una matriz?

Esto es lo que me gustaría poder hacer:

 function convertVersionToNumber(line) { const groups = line.matchAll(/^# ([0-9]).([0-9][0-9]).([0-9][0-9])\s*/g); return parseInt(groups[1] + groups[2] + groups[3]); } convertVersionToNumber("# 1.03.00")

Esto no funciona porque groups son un IterableIterator<RegExpMatchArray> , no una matriz. Array.from tampoco parece convertirlo en una matriz de grupos. ¿Hay alguna manera fácil (idealmente algo que pueda caber en una sola línea) que pueda convertir groups en una matriz?

La API de ese IterableIterator<RegExpMatchArray> es un poco inconveniente y no sé cómo omitir el primer elemento en un for...of . Quiero decir, sé cómo usar ambos, parece que agregará más de 4 líneas, así que me gustaría saber si hay una forma más concisa.

Estoy usando mecanografiado, así que si tiene algo de azúcar sintáctico para hacer esto, estaría feliz de usarlo.

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

0

1) matchAll devolverá un objeto Iterator Iterator Iterator [RegExp String Iterator]

El result contendrá un iterador y cuando use el operador de propagación le dará todas las coincidencias. Dado que contiene solo una coincidencia, contiene un solo elemento.

 [ '# 1.03.00', '1', '03', '00', index: 0, input: '# 1.03.00', groups: undefined ]

Finalmente, usamos un operador de propagación para obtener todo el valor y envolverlo en una matriz

 [...result] 

 function convertVersionToNumber(line) { const result = line.matchAll(/^# ([0-9]).([0-9][0-9]).([0-9][0-9])\s*/g); const groups = [...result][0]; return parseInt(groups[1] + groups[2] + groups[3]); } console.log(convertVersionToNumber("# 1.03.00"));

Dado que está utilizando expresiones regulares, es decir /^# ([0-9]).([0-9][0-9]).([0-9][0-9])\s*/

ingrese la descripción de la imagen aquí

2) Si hay varias coincidencias, puede distribuir los resultados en una matriz y luego usar for..of para recorrer las coincidencias.

 function convertVersionToNumber(line) { const iterator = line.matchAll(/# ([0-9]).([0-9][0-9]).([0-9][0-9])\s*/g); const results = [...iterator]; for (let arr of results) { const [match, g1, g2, g3] = arr; console.log(match, g1, g2, g3); } } convertVersionToNumber("# 1.03.00 # 1.03.00");

Solución alternativa: también puede obtener el mismo resultado usando una coincidencia simple

 function convertVersionToNumber(line) { const result = line.match(/\d/g); return +result.join(""); } console.log(convertVersionToNumber("# 1.03.00"));

about 4 years ago · Juan Pablo Isaza Relatório

0

No necesita .matchAll en este caso concreto. Simplemente desea hacer coincidir una cadena en un formato específico y volver a formatearla conservando solo las tres subcadenas capturadas.

Puedes hacerlo con .replace :

 function convertVersionToNumber(line) { return parseInt(line.replace(/^# (\d)\.(\d{2})\.(\d{2})[\s\S]*/, '$1$2$3')); } console.log( convertVersionToNumber("# 1.03.00") );

Puede verificar si la cadena antes de reemplazar es igual a la nueva cadena si necesita verificar si hubo una coincidencia.

Tenga en cuenta que debe escapar de los puntos para que coincidan como caracteres literales.

El patrón ^# (\d)\.(\d{2})\.(\d{2})[\s\S]* coincide con

  • ^ - comienzo de la cadena
  • # - espacio + #
  • (\d) - Grupo 1: un dígito
  • \. - un punto
  • (\d{2}) - Grupo 2: dos dígitos
  • \. - un punto
  • (\d{2}) - Grupo 3: dos dígitos
  • [\s\S]* - el resto de la cadena (cero o más caracteres, tantos como sea posible).

El patrón de reemplazo $1$2$3 son los valores concatenados del Grupo 1, 2 y 3.

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