Autor Tema: Javascript expresiones regulares ejemplo significado punto interrogante CU01154E  (Leído 2944 veces)

FranStoker

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Hola a todos.

En esta parte de vuestro curso Javascript desde cero, entrega CU01154E, explicáis las expresiones regulares.

Decís que:

Citar
Para introducir el concepto de símbolo especial y expresión regular vamos a usar primeramente sólo dos caracteres especiales: el carácter “punto” . , que es un simple punto, y el carácter ?

Y luego, a modo de ejemplo, usais la siguiente expresión:

Citar
En forma de literal: var miExpresionRegular = /as?.a/ representa a todas las cadenas que contienen una subcadena con la primera letra de la subcadena una a, seguida de una s, opcionalmente seguida de cualquier letra, y seguida de una a.

Bien, tengo unas dudas:

-En primer lugar, qué quiere decir "en forma de literal"?

-Después, no comprendo cómo ?. equivale a "opcionalmente seguida de cualquier letra". ¿No era un simple punto y ya está?

-Un poco más adelante, además, como ejemplo de cadena válida o no válida según el patrón, tenemos que:

Citar
Una cadena como “castaño” contiene el patrón: c-a-s-t-a-ñ-o contiene el patrón, siendo el carácter opcional la letra t.

Pero después decís:

Citar
Cadenas como “sabina”, “casualidad” ó “as” no contienen el patrón.

"casualidad" no cumple el patrón igual que lo hace "castaño"? Es una a, una s, una letra aleatoria, y una a...

La última duda que tengo: las reglas para las expresiones regulares en JS son las mismas que se usa en las restricciones para XML? Por ejemplo:

Código: [Seleccionar]
<xs:restriction base="xs:string">
      <xs:pattern value="[A-Z][A-Z][A-Z]"/>
   </xs:restriction>

Muchas gracias y un saludo a todos.

« Última modificación: 02 de Agosto 2016, 18:45 por César Krall »

FranStoker

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Re: (CU01154E) Javascript- No entiendo la siguiente expresión regular.
« Respuesta #1 en: 25 de Julio 2016, 22:00 »
Como no puedo editar, decir que una de mis dudas (el significado del punto), ya está solucionada.

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Hola!

Citar
-En primer lugar, qué quiere decir "en forma de literal"?

Esto simplemente se refiere a cómo se ha definido la expresión regular. En la entrega se indica:

Citar
JavaScript permite crear expresiones regulares de dos maneras:

a) En forma de literal: var miExpresionRegular = /as?.a/ representa a todas las cadenas que contienen una subcadena con la primera letra de la subcadena una a, seguida de una s, opcionalmente seguida de cualquier letra, y seguida de una a.

b) Instanciando el objeto RegExp: var miExpresionRegular = new RegExp("as?.a") representa lo mismo.

Cuando escribes una expresión regular dentro de / ... / decimos que estamos usando una expresión regular en forma de literal, es solo una cuestión de terminología.


Citar
-Después, no comprendo cómo ?. equivale a "opcionalmente seguida de cualquier letra". ¿No era un simple punto y ya está?

En la entrega se explica que el símbolo punto indica existencia de cualquier carácter. Por ejemplo la expresión regular /ca.e/ concuerda con cate y con  cafe pero no con catte ni con caffe ni con cae

El símbolo interrogación indica opcionalidad: el carácter que lo precede puede aparecer 0 ó 1 vez en la subcadena. Por ejemplo la expresión regular /ca?e/ concuerda con cae y con ce, porque permite que haya un carácter a o ninguno. No concuerda con catte ni con caffe ni con came.


Citar
-Un poco más adelante, además, como ejemplo de cadena válida o no válida según el patrón var miExpresionRegular = /as?.a/

Aquí el patrón implica que la cadena ha de contener una a, seguida opcionalmente de una s, seguida de cualquier carácter, y luego seguida de otra a.

castaño cumple porque hay una a seguida de una s, seguida de una t (que es cualquier caracter) y luego seguida de una a.

casualidad sí cumple porque hay una a seguida de una s seguida de una u (que es cualquier carácter) y luego seguida de una a. Por tanto tienes razón al plantear esa duda: ahí hay un pequeño error en el curso (que vamos a corregir, gracias por indicarlo).

Esto podemos comprobarlo añadiendo msg = msg + '¿Contiene casualidad el patrón? : '+ miExpReg.test('casualidad') +'\n'; al código del curso, vemos que nos devuelve true.


Citar
La última duda que tengo: las reglas para las expresiones regulares en JS son las mismas que se usa en las restricciones para XML?

Entre distintos lenguajes puede haber similitudes en la forma de crear expresiones regulares. En algunos casos pueden coincidir, pero en otras no. Por eso siempre que vayamos a usar expresiones regulares debemos consultar la especificación de expresiones regulares para ese lenguaje.

Saludos!
Responsable de departamento de producción aprenderaprogramar.com

Reinier Garcia

  • Sin experiencia
  • *
  • Mensajes: 9
  • Y el último que apague el Morro!
    • Ver Perfil
    • Perfil en LinkedIn
Lo que sucede es que está mal redactada la explicación y mal interpretada la expresión regular:

En vez de decir:

Citar
a) En forma de literal: var miExpresionRegular = /as?.a/ representa a todas las cadenas que contienen una subcadena con la primera letra de la subcadena una a, seguida de una s, opcionalmente seguida de cualquier letra y seguida de una a.

Debió decir:

Citar
a) En forma de literal: var miExpresionRegular = /as?.a/ representa a todas las cadenas que contienen una subcadena con la primera letra de la subcadena una a, seguida de una s opcional, seguida de un caracter cualquiera y seguida de una a.

 

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".