¿Cómo diablos los abordo?
Me gusta cualquier cosa nueva:
10 Study
20 Practice
30 goto 10
Estudio
Encuentro que los maestros más exitosos comienzan a enseñar cualquier materia al proporcionarles un poco de antecedentes. Es importante tener un contexto de lo que estás aprendiendo y, lo más importante, por qué lo estás aprendiendo.
Todo es coincidencia de cadenas
Las expresiones regulares son un medio para 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 la cadena con para que coincida, pero no expresan de ninguna manera cómo la Programa es ir haciendo el emparejamiento. Por esta razón, es posible usar expresiones regulares muy rápidamente 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 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 sencilla de escribir el código.
Algunos se quejarán (y deberían) quejarse de mi oración anterior diciendo algo como:
RegEx no hace que un programa sea más simple.
es cierto
RegEx no hace que un programa sea más simple, RegEx hace que escribir el programa sea más simple. Aún debe ser minucioso en sus pruebas para asegurarse de que todos los casos correctos coincidan correctamente y de que no todos los casos incorrectos. 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.
permite incorporar algunos ejemplos. He elegido obligatoriamente el motor RegEx de JavaScript porque puedo probarlo en vivo en el navegador fácilmente y porque no tendré que hacer ninguna cadena de escape mientras utilizo los literales RegEx.
Cuando haces una coincidencia normal de cadenas, pruebas 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, no sabemos de antemano si algo se hará o no. Ahora podemos comenzar a aceptar comentarios del usuario:
if ( prompt( 'Say "bar" to do something.' ) == 'bar' ) doSomething();
Maravilloso, ahora los usuarios pueden ingresar bar
y ocurrirá algo, hasta que reciba informes de errores de los usuarios que dicen que "bar"
no funciona, o que "BAR" no funciona, o que han escrito BRA
100 veces y nunca pasa nada.
Ignorar las faltas de ortografía y los caracteres adicionales, 'bar' != 'BAR'
, y los programadores deben encontrar una forma de probar dónde están los caracteres en el caso equivocado.
Solución simple, use toLowerCase
. Eso funciona de maravilla, pero ¿qué pasa con nuestros usuarios que utilizan el inglés británico sobre el inglés estadounidense cuando coinciden con something == 'color'
? Ahora tendrás que hacer 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 puede combinarse simplemente 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 se pierde reinventando la rueda.
Dónde 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 eso.
luego léelo de nuevo.
Se necesita tiempo para aprender, considérelo como una inversión: una hora para aprender RegEx ahora ahorra una hora la próxima vez que necesite hacer una coincidencia de patrones de cadena, y luego otra hora la próxima vez después de eso.
Práctica
Después de leer todo sobre RegEx, es probable que no entiendas la mayoría. Eso es porque en realidad no estás haciendo nada con eso.
Mencioné por qué elegí JS para este ejemplo, le insto a que se meta con él en su navegador. Es rápido y puedes hacerlo directamente en la 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 tu pie en la puerta. Juega con él, divídelo, ve qué partidos y qué no.
Cuando te quedas atascado en la práctica, continúa con 30
. Necesitas leer para aprender más, pero necesitas practicar para entender realmente lo que has aprendido.