0

Tengo una expresión regular en javascript que no entiendo cual es la función de los paréntesis, por que cuando los quito la expresión regular ya no funciona y acepta 4 dígitos o mas

/^(\d{4}|\d{6})$/g
Matias Capuano
  • 339
  • 2
  • 15
Alan BM
  • 81
  • 6

1 Answers1

2

Los paréntesis () sirven para agrupar y adicionalmente para capturar (capturar significa poder recuperar más adelante el trozo que se ha encontrado dentro de los paréntesis).

Los paréntesis sin captura (?:) sirven solamente para agrupar.

En tu expresión regular, el uso de paréntesis (bastaría paréntesis sin captura) es necesario porque al quitarlos te queda lo siguiente:

^\d{4}|\d{6}$

Como sabrás, | sirve para separar dos expresiones. Al quitar los paréntesis, el inicio de línea ^ forma parte de la expresión de la izquierda, mientras que el fin de línea $ forma parte de la expresión de la derecha. Entonces, esa expresión significa:

Empieza por 4 números o Termina con 6 números

Lo cual te permite poner números de más de 6 dígitos o incluso letras siempre que termine con 6 dígitos o los 4 primeros sean dígitos.

Así que realmente lo que quieres es tener un inicio y fin para cada parte de la expresión, de ahí que utilizaras paréntesis para agrupar las dos opciones.

Si no quisieras utilizar paréntesis, una expresión equivalente hubiera sido:

^\d{4}$|^\d{6}$

Es decir, agregamos ^ y $ a ambos lados.

Otra opción podría haber sido:

^\d{4}(?:\d\d)?$

Es decir: Inicio de la cadena, 4 números, y luego opcionalmente ? dos números. Nota que utilizo un grupo para agrupar los dos números juntos y que así el ? afecte a ambos a la vez. De esta manera o aparecen los dos números o no aparece ninguno.

NOTA

Si no se pretende capturar lo que hay dentro de los paréntesis, entonces se considera más adecuado utilizar paréntesis sin captura. Por ejemplo:

^(?:\d{4}|\d{6})$
Julio
  • 3,173
  • 1
  • 7
  • 23