Autor Tema: Expresiones regulares JavaScript comprobar si cadena cumple un patrón CU01154E  (Leído 3887 veces)

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Hola.

Citar
EJERCICIO
Dada la expresión regular de JavaScript /^[A-C]\w+\ses\s\w+/ indicar cuáles de las siguientes cadenas hacen match con la expresión regular, y en caso de hacer match, qué parte o partes son las que hacen match:
a)  Juan es guapo
b) Adriano no es feo
c) Adriano deja de ser guapo
d) Adriano ya es guapo
e) No es ahora
f) Ahora es no
g) Adriano es guapo

Este es el código para hacer las comprobaciones.
Código: [Seleccionar]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Ejemplo aprenderaprogramar.com</title><meta charset="utf-8">
<style>
.pulsador {padding:15px; width: auto; display: inline-block; margin: 25px;
cursor: pointer; color: yellow; border-radius: 40px; background: purple;}
</style>
<script type="text/javascript">
function ejemplo() {
var miExpReg = /^[A-C]\w+\ses\s\w+/
var msg = 'Patrón: /^[A-C]\\w+\\ses\\s\\w+/ \n';
msg = msg + '¿Contiene "Juan es guapo" el patrón? : '+ miExpReg.test('Juan es guapo') +'\n';
msg = msg + '¿Contiene "Adriano no es feo" el patrón? : '+ miExpReg.test('Adriano no es feo') +'\n';
msg = msg + '¿Contiene "Adriano deja de ser guapo" el patrón? : '+ miExpReg.test('Adriano deja de ser guapo') +'\n';
msg = msg + '¿Contiene "Adriano es guapo" el patrón? : '+ miExpReg.test('Adriano es guapo') +'\n';
msg = msg + '¿Contiene "No es ahora" el patrón? : '+ miExpReg.test('No es ahora') +'\n';
msg = msg + '¿Contiene "Ahora es no" el patrón? : '+ miExpReg.test('Ahora es no') +'\n';
msg = msg + '¿Contiene "Adriano es guapo" el patrón? : '+ miExpReg.test('Adriano es guapo') +'\n';
alert(msg);
}
</script>
</head>
<body>
<div id="cabecera"><h2>Cursos aprenderaprogramar.com</h2><h3>Ejemplos JavaScript</h3></div>
<div class ="pulsador" onclick="ejemplo()"> Probar </div>
</body>
</html>

No acabo de entender completamente la expresión /^[A-C]\w+\ses\s\w+/

^[A-C], cadenas que empiecen por A,B oC

\ses\s, cadenas que contengan " es ".

\w haría match con cualquier letra mayúscula, minúscula, número o guión bajo, según dice la explicación, pero al añadirle el +, no consigo entender el significado.

Edito:
Creo que conseguí entender el significado, lo que no se es si conseguiré explicarlo bien.
Se hará match en cadenas de texto que empiecen por A,B o C, que continúen con cualquier letra mayúscula, minúscula, número o guión bajo, después contengan " es " y continúen con cualquier letra mayúscula, minúscula, número o guión bajo.

Por eso las expresiones, "Adriano es guapo" y "Ahora es no" devuelven true.

.
« Última modificación: 05 de Noviembre 2015, 08:47 por Mario R. Rancel »

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1965
    • Ver Perfil
Hola Pedro la expresión /^[A-C]\w+\ses\s\w+/ la leeríamos así:

Cadenas que empiezan por A, B ó C -------- ^[A-C]

Seguidas de uno o más de uno caracteres cualquiera (solo letras o números) -------------- \w+

Seguidas de un espacio en blanco ----------------- \s

Seguida de las letras <<es>> ---------------- es

Seguidas de un espacio en blanco ----------------- \s

Seguidas de uno o más de uno caracteres cualquiera (solo letras o números) -------------- \w+

Seguidas de cualquier cosa, ya que no se especifica una condición de terminación


Y las respuestas:

a) Juan es guapo ------------- No cumple por no empezar por A, B ni C
b) Adriano no es feo ------------ No cumple por tener más de dos espacios en blanco que después del primer espacio no viene <<es>>
c) Adriano deja de ser guapo ------------- No cumple por no contener es
d) Adriano ya es guapo ------------ No cumple por tener más de dos espacios en blanco que después del primer espacio no viene <<es>>
e) No es ahora ------------- No cumple por no empezar por A, B ni C
f) Ahora es no ------------ Sí cumple
g) Adriano es guapo ------------ Sí cumple

El código lo tienes bien pero tienes repetido dos veces "Adriano es guapo"

Saludos
« Última modificación: 05 de Noviembre 2015, 11:54 por Mario R. Rancel »

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Hola Mario gracias por responder.

En esta cadena "Adriano no es feo" dices que no cumple por tener mas de dos espacios, y tengo una duda, si yo cambio por esta cadena "Adriano es muy guapo", la expresión me devuelve true y tiene tres espacios en total. Lo que quiero decir es que si no se cumple, creo que será porque después de cumplirse esta parte , ^[A-C]\w+\s, de la expresión, lo siguiente que continua no es, es\s\w+.
No se si me entenderás lo que quiero decir.

¿Es así?


Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1965
    • Ver Perfil
Tienes razón, creo que el quid está en que la expresión regular establece las condiciones de inicio de la cadena, pero no establece una condición de fin.

El razonamiento sería entonces el siguiente:

inicioHaceMatch + cualquier cosa -- > El test devuelve true

Por ejemplo: ¿Contiene "Adriano es muy guapo y no hace frío" el patrón? : true

Por tanto esta expresión regular obliga a que la cadena comience de una determinada manera, pero puede terminar como sea porque no se establece condición de terminación.

Para establecer una condición de terminación habría que indicarla específicamente, por ejemplo:

 ^a..e$

Cadenas que empiezan por a y terminan con e, y que contienen exactamente cuatro caracteres (la a inicial, dos intermedios, más la e final), aquí si se ha especificado una condición de terminación usando el $

He editado el post anterior, si ves algo erróneo avísame

Saludos

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Ahora lo veo todo bien, y por fin me quedó claro el asunto de las expresiones regulares. :o, que la verdad es que le dí muchas vueltas.

Gracias otra vez.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".