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
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
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})$