¿Cómo diablos los enfrento?
Como cualquier cosa nueva:
10 Study
20 Practice
30 goto 10
Estudiar
Encuentro que la mayoría de los maestros exitosos comienzan a enseñar cualquier materia proporcionando primero un poco de antecedentes sobre la materia. Es importante tener un contexto de lo que está aprendiendo y, lo más importante, por qué lo está aprendiendo.
Todo coincide con la cadena
Las expresiones regulares son un medio de hacer coincidir patrones en el texto. Es un lenguaje declarativo incorporado en muchos otros lenguajes de programación.
Me gustaría enfatizar que es un lenguaje declarativo, las expresiones regulares son útiles para expresar qué cadena debe coincidir, pero de ninguna manera expresan cómo el programa debe hacer la coincidencia. Por esta razón, es posible usar expresiones regulares muy rápida y muy lentamente en el mismo lenguaje de programación simplemente usando un analizador RegEx diferente.
La razón para crear expresiones regulares es la misma para la creación de la mayoría de los lenguajes de programación: los programadores se encontraron realizando la misma tarea complicada una y otra vez y decidieron que querían una forma más simple de escribir el código.
Algunos se quejarán (y deberían) sobre mi oración anterior diciendo algo como:
RegEx no simplifica un programa.
es verdad
RegEx no simplifica un programa, RegEx simplifica la escritura del programa. Aún debe ser exhaustivo en sus pruebas para asegurarse de que todos los casos correctos coincidan correctamente y que todos los casos incorrectos no. Es realmente difícil probar "todos", y con patrones complicados, es realmente difícil probar "la mayoría". En el peor de los casos, aún debería estar probando "algunos" casos.
incorporemos algunos ejemplos que he elegido obligatoriamente el motor RegEx de JavaScript porque puedo probarlo en vivo en el navegador fácilmente y porque no tendré que hacer ningún escape de cadena mientras uso literales RegEx.
Cuando hace una coincidencia de cadena normal, prueba un valor de cadena contra otro. Pueden venir de cualquier parte, pero al final se necesitan dos cadenas que se comparan entre sí:
if ( 'foo' == 'bar' ) doSomething();
Ese ejemplo apesta porque nunca hará nada
if ( foo == 'bar' ) doSomething();
Mucho mejor; ahora, en realidad no sabemos de antemano si se hará algo o no. Ahora podemos comenzar a aceptar la entrada del usuario:
if ( prompt( 'Say "bar" to do something.' ) == 'bar' ) doSomething();
Maravilloso, ahora los usuarios pueden ingresar bar
y sucederá algo, hasta que reciban informes de errores de los usuarios que dicen que "bar"
no está funcionando, o que "BAR" no está funcionando, o que han escrito BRA
100 veces y nunca pasa nada.
Ignorando los errores ortográficos y los caracteres adicionales, los 'bar' != 'BAR'
programadores deben pensar en una forma de probar dónde están los caracteres en el caso equivocado.
Solución simple, uso toLowerCase
. Eso funciona de maravilla, pero ¿qué pasa con nuestros usuarios que utilizan el inglés británico sobre el inglés americano cuando estás haciendo coincidir something == 'color'
? Ahora tendrás que coincidir something == 'color' || somthing == 'colour'
.
En pocas palabras, los patrones simples se convierten en muchos códigos repetitivos muy rápidamente.
El ejemplo de color simplemente se puede combinar con:
/colou?r/.test( something )
Una comprensión sólida de los conceptos básicos de las expresiones regulares puede reducir significativamente la cantidad de tiempo que desperdicia reinventando la rueda.
Donde estudiar
La mayoría de los idiomas que implementan expresiones regulares tienen al menos un recurso disponible para la sintaxis específica del uso de expresiones regulares dentro de ese idioma. Uno para JavaScript se puede encontrar en MDN
Léelo.
todo ello.
luego léelo de nuevo.
Toma tiempo aprender, piense en ello como una inversión: una hora para aprender RegEx ahora ahorra una hora la próxima vez que necesite hacer alguna coincidencia de patrones de cadena, y luego otra hora la próxima vez.
Práctica
Después de leer todo sobre RegEx, probablemente no entenderás la mayor parte. Eso es porque en realidad no estás haciendo nada con eso.
Mencioné por qué elegí JS para este ejemplo, le insto a que lo juegue en su navegador. Es rápido y puede hacerlo directamente en su barra de URL.
JS tiene algunas formas diferentes y simples de usar RegEx:
string.match( regex )
regex.exec( string )
regex.test( string )
Comenzando con algo simple como:
javascript:'color'.match(/colou?r/);
Es una manera fácil de poner el pie en la puerta. Juega con él, rómpelo para ver qué coincide y qué no.
Cuando te quedes atascado en la práctica, continúa 30
. Necesita leer para aprender más, pero necesita practicar para comprender realmente lo que ha aprendido.