Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

131
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!