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

251
Vistas
Cadena de duración coincidente de hora-minuto-segundo (hms)

Quiero hacer coincidir los dígitos antes de h , m y s en sus respectivos grupos de captura. Quiero hacer coincidir los 3 grupos si es posible. Si falta uno o dos de los otros grupos, haga coincidir los últimos grupos.

Como se ve en la imagen a continuación y en este regex101 , actualmente tengo una expresión regular de
/(\d+)(?=h)|(\d+)(?=m)|(\d+)(?=s)/g , que coincide, para mi cadena de prueba, 12 coincidencias con 1 grupo en cada coincidencia.

expresión regular y cadena

Pero I want 7 partidos. Donde el primer partido contiene 3 grupos, el 2º al 4º partido contiene 2 grupos cada uno y los últimos 3 partidos contienen 1 grupo cada uno.

Entonces I want:

  1. Partido 1: 11h22m33s
    1. Grupo 1: 11
    2. Grupo 2: 22
    3. Grupo 3: 33
  2. Partido 2: 11h22m
    1. Grupo 1: 11
    2. Grupo 2: 22
  3. Partido 3: 11h33s
    1. Grupo 1: 11
    2. Grupo 2: 33
  4. Partido 4: 22m33s
    1. Grupo 1: 22
    2. Grupo 2: 33
  5. Partido 5: 11h
    1. Grupo 1: 11
  6. Partido 6: 22m
    1. Grupo 1: 22
  7. Partido 7: 33s
    1. Grupo 1: 33

Editar

¡Las cadenas de prueba pueden estar contenidas dentro de otras cadenas! Ej. 08:00 + 11h . Ver https://regex101.com/r/RWA9Oy/1

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Si necesita asegurarse de que toda la cadena coincida con el patrón, puede usar

 ^(?!$)(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s)?$

Vea la demostración de expresiones regulares .

Si necesita extraer estas cadenas de los textos más largos, puede usar

 \b(?=\w)(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s)?\b(?!\w)

Vea esta demostración de expresiones regulares .

Detalles :

  • ^ - comienzo de la cadena
  • (?!$) - la cadena no puede terminar al principio (=no puede estar vacía)
  • \b(?=\w) - un límite de palabra donde el char inmediatamente a la derecha es una palabra char (=es una letra, dígito o _ )
  • (?:(\d+)h)? - un grupo opcional que no captura que coincida con uno o más dígitos (capturándolos en el Grupo 1) y una letra h
  • (?:(\d+)m)? - un grupo opcional que no captura que coincida con uno o más dígitos (capturándolos en el Grupo 2) y una letra m
  • (?:(\d+)s)? - un grupo opcional que no captura que coincida con uno o más dígitos (capturándolos en el Grupo 3) y una letra s
  • $ - final de la cadena
  • \b(?!\w) - un límite de palabra donde el carácter inmediatamente a la derecha NO es un carácter de palabra o al final de la cadena.

En caso de que desee permitir cualquier cantidad de espacio en blanco entre los componentes, puede agregar \s* :

 ^(?!\s*$)\s*(?:(\d+)\s*h\s*)?(?:(\d+)\s*m\s*)?(?:(\d+)\s*s)?\s*$

O, para coincidencias parciales

 \b(?=\w)(?:(\d+)\s*h\s*)?(?:(\d+)\s*m\s*)?(?:(\d+)\s*s)?\b(?!\w)

Vea esta demostración de expresiones regulares y otra demostración de expresiones regulares .

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