Expresiones regulares: agrupación en subpatrones ()


Los paréntesis abiertos y cerrados pueden tener varios significados en las expresiones regulares. El fundamental es el agrupar una parte de la expresión regular y aplicarle operaciones como |, *, +, ? etc.

Problema

Elaborar una expresión regular que permita validar si se ingresó correctamente un valor entero o real y que eventualmente lleve el caracter + o - al principio. Validar que si se ingresa la coma debe ingresarse la parte real

<html>
<head>
</head>
<body>

<script type="text/javascript">
  var nro=prompt('ingrese un número entero o real:','');
  var patron=/^[+-]?\d+(\,\d+)?$/;
  if (patron.test(nro))
    alert('Correcto');
  else
    alert('Incorrecto');
</script>

</body>
</html>

Podemos analizar esta expresión regular:

  var patron=/^[+-]?\d+(\,\d+)?$/;

Como la coma y la parte decimal son opcionales los encerramos entre paréntesis y lo finalizamos con el cuantificador '?'
Esto hace que cuando se ingresa la coma deba ingresarse uno o más dígitos obligatoriamente ya que los agrupamos mediante los paréntesis.

Problema

Ingresar una hora con el formato hh:mm:ss, plantear una expresión regular que valide si es correcta.

<html>
<head>
</head>
<body>

<script type="text/javascript">
  var hora=prompt('ingrese una hora con el formato hh:mm:ss','');
  var patron=/^(0[1-9]|1\d|2[0-3]):([0-5]\d):([0-5]\d)$/;
  if (patron.test(hora))
    alert('Correcto');
  else
    alert('Incorrecto');
</script>

</body>
</html>

Analicemos un poco como hemos agrupado cada uno de las secciones de la hora:

  var patron=/^(0[1-9]|1\d|2[0-3]):([0-5]\d):([0-5]\d)$/;

La parte inicial puede tomar un valor entre 0 y 23:

(0[1-9]|1\d|2[0-3])

Utilizamos el metacarácter | para permitir ingresar el cero seguido de un valor entre 1 y 9, o el valor 1 y cualquier dígito, o el dos seguido del dígito 0,1,2, o 3.

Luego debe ingresarse el caracter dos puntos.

La parte de los segundos queda definida por el patrón ([0-5]\d) es decir un valor entre 0 y 5 seguido de cualquier dígito.

Finalmente los segundos es similar a los minutos: ([0-5]\d)

Retornar