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

211
Vistas
Regexp global está devolviendo un índice incorrecto dentro del bucle

Estoy tratando de eliminar una marca de tiempo (con formato de números y guiones) de una cadena. En el proceso, experimenté con RegExp global. Se me ocurrió el siguiente código:

 for(let filename of ["123-123_aaa_bbb_ccc","aaa_bbb_ccc_129-999"]) { let s=filename.split("_") let globalRegex = new RegExp('^\d+\-\d+$', 'g'); for(let si of s){ if(globalRegex.test(si)) break } console.log(`match found at: `,globalRegex.lastIndex) }

que devuelve:

 match found at: 0 match found at: 0

Mis preguntas son:

  1. ¿Cómo elimino correctamente la marca de tiempo de la cadena?
  2. ¿Por qué la expresión regular devuelve 0 para ambas ejecuciones?
  • Esperaba (0 luego 3 índice para ser devuelto) Parece que el estado de la expresión regular global no se reinicializa para la segunda ejecución. Sin embargo, asumí que sería, ya que se vuelve a declarar dentro del ciclo for
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Hay bastantes problemas aquí:

  • Obtiene 0 s porque su expresión regular no coincide, y no coincide porque definió la cadena de expresión regular dentro de una cadena literal normal, por lo tanto, pierde todas las barras invertidas individuales. El patrón debe establecerse con un literal regex, let globalRegex = /^\d+\-\d+$/; (vea ¿Por qué esta expresión regular de javascript no funciona? ). Tenga en cuenta la ausencia de la bandera g , si la usa con RegExp#test() , no debe usar la bandera g para evitar problemas (vea ¿Por qué una RegExp con bandera global da resultados incorrectos? ).
  • Incluso si define la expresión regular correctamente, obtendrá 0 s como salida porque una expresión regular /^\d+\-\d+$/ puede y solo coincidirá al comienzo de la cadena (Índice = 0). Parece que desea obtener los ID de las "palabras" o "tokens" en la cadena, por lo que debe contarlos.

Por lo tanto, podría volver a escribir el código como

 for(let filename of ["123-123_aaa_bbb_ccc","aaa_bbb_ccc_129-999"]) { let result = -1; let s=filename.split("_") let globalRegex = /^\d+\-\d+$/; for (const [index, si] of s.entries()) { if(globalRegex.test(si)) { result = index break } } console.log(`match found at: `, result) }

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