solo regulares regular probar online letras expresiones expresion espacios espacio ejemplos crear blanco alfanumerico javascript regex

javascript - probar - grupo de captura en expresiones regulares



expresiones regulares online (3)

Estoy explorando la captura de grupos en Regex y me estoy confundiendo acerca de la falta de documentación al respecto. Por ejemplo, ¿alguien puede decirme la diferencia entre dos expresiones regulares:

/(?:madhur)?/

y

/(madhur)?/

Según mi,? en segundo sugiere hacer coincidir a madhur cero o una vez en la cadena.

¿En qué se diferencia el primero del segundo?


Aquí está el ejemplo más obvio:

"madhur".replace(/(madhur)?/, "$1 ahuja"); // returns "madhur ahuja" "madhur".replace(/(?:madhur)?/, "$1 ahuja"); // returns "$1 ahuja"

Las referencias se almacenan en orden, de modo que la primera coincidencia se pueda recuperar con $1 , la segunda con $2 , etc. Si captura una coincidencia (es decir, (...) lugar de (?:...) ), puede usar estas , y si no lo haces, entonces no hay nada especial. Como otro ejemplo, considere lo siguiente:

/(mad)hur/.exec("madhur"); // returns an array ["madhur", "mad"] /(?:mad)hur/.exec("madhur"); // returns an array ["madhur"]


El primero no almacenará el grupo de captura, por ejemplo, $1 estará vacío. El prefijo ?: convierte en un grupo que no captura . Esto generalmente se hace para un mejor rendimiento y para despejar las referencias anteriores.

En el segundo ejemplo, los caracteres del grupo de captura se almacenarán en la referencia inversa $1 .

Lectura adicional .


No afecta el emparejamiento en absoluto.

Le dice al motor regex

  • no almacenar los contenidos del grupo para su uso (como $ 1, $ 2, ...) por el método replace()
  • no devolverlo en la matriz de retorno del método exec() y
  • no contarlo como una referencia inversa (/ 1, / 2, etc.)