Foros del Web » Programando para Internet » Javascript »

Expresion regular :S

Estas en el tema de Expresion regular :S en el foro de Javascript en Foros del Web. Hola a todos, tengo una duda Al evaluar: Código: <!--:es-->Texto numero 1<!--:--><!--:en-->texto 2<!--:--> con Código: <!--:es-->(.|\n)*?<!--:--> me devuelve : Código: Texto numero 1,1 Es decir, ...
  #1 (permalink)  
Antiguo 01/02/2011, 12:37
 
Fecha de Ingreso: octubre-2008
Mensajes: 140
Antigüedad: 16 años, 1 mes
Puntos: 1
Expresion regular :S

Hola a todos, tengo una duda

Al evaluar:

Código:
<!--:es-->Texto numero 1<!--:--><!--:en-->texto 2<!--:-->
con
Código:
<!--:es-->(.|\n)*?<!--:-->
me devuelve :

Código:
Texto numero 1,1
Es decir, le agrega una coma y repite el ultimo caracter. Alguien tiene idea de pq?

Mil gracias!
  #2 (permalink)  
Antiguo 01/02/2011, 17:43
Avatar de goteen_mx  
Fecha de Ingreso: abril-2005
Ubicación: D.F.
Mensajes: 403
Antigüedad: 19 años, 8 meses
Puntos: 37
Respuesta: Expresion regular :S

El problema es que se repite tu fin de cadena, por lo que esta adentro lo tomoa desde el primer toquen hasta la mitada de cadena y la segunda desde el primero hasta el fin de cadena, puedes agregarle la opción g para que busque todas las coincidencias desde el principio y modificar tu cadena del final

var str = "<!--:es-->Texto numero 1<!--:--><!--:es-->texto numero 2<!--:fes-->";

var patt1 = /(<!--:es-->)([A-z]| )*[0-9]<!--:-->/gi;
document.write(str.match(patt1));


document.write("<br><br>");
var patt1 = /<!--:es-->(.|\n)*?<!--:-->/ig;
document.write(str.match(patt1));

Saludos.
  #3 (permalink)  
Antiguo 01/02/2011, 18:34
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Expresion regular :S

buenas...

@goteen_mx, si me permites, una opinion sobre tu respuesta. honestamente no comprendi muy bien tu explicacion. ademas, creo que la respuesta es erronea aunque el codigo demuestra una solucion. en realidad, la razon por la que aparece ese ultimo caracter (la coma y el numero) se debe a que la expresion contiene una sub-expresion. en dicho caso, las sub-expresiones crean grupos y dependiendo de la funcion que utilice la expresion regular puede devolver un array con varios elementos. para evitarlo, simplemente se le indica a la expresion que no debe crear un grupo de la sub-expresion.
Código:
/<!--:es-->(?:.|\n)*?<!--:-->/
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #4 (permalink)  
Antiguo 02/02/2011, 10:47
Avatar de goteen_mx  
Fecha de Ingreso: abril-2005
Ubicación: D.F.
Mensajes: 403
Antigüedad: 19 años, 8 meses
Puntos: 37
Respuesta: Expresion regular :S

zerokilled si no sabia como expresarme, pero efectivamente lo correcto es una subexpresión dentro de la expresión, y agradezco el dato, siempre se aprende algo nuevo, por que estuve probando las expresiones y no encontraba la manera de decirle que no me tomara una subexpresión de la expresión.


Saludos.

Etiquetas: expresion, regular
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:15.