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.
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:
11h22m33s11223311h22m112211h33s113322m33s223311h1122m2233s33 ¡Las cadenas de prueba pueden estar contenidas dentro de otras cadenas! Ej. 08:00 + 11h . Ver https://regex101.com/r/RWA9Oy/1
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 .