Foros del Web » Programando para Internet » Javascript »

$& en expresiones regulares

Estas en el tema de $& en expresiones regulares en el foro de Javascript en Foros del Web. ¿Alguien me explica este concepto? Por ejemplo cuando se quiere reemplazar usando un string. Me interesaría eliminar el primer caracter de $& cuando estoy reemplazando ...
  #1 (permalink)  
Antiguo 10/07/2011, 14:18
zant95
Invitado
 
Mensajes: n/a
Puntos:
Pregunta $& en expresiones regulares

¿Alguien me explica este concepto? Por ejemplo cuando se quiere reemplazar usando un string.
Me interesaría eliminar el primer caracter de $& cuando estoy reemplazando ¿Es eso posible?
Perdonen, pero todavía no entiendo mucho de expresiones regulares.

Saludos.
  #2 (permalink)  
Antiguo 10/07/2011, 14:25
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
Puntos: 1485
Respuesta: $& en expresiones regulares

buenas,
¿no consideras que ya es momento de leer alguna referencia acerca de expresiones regulares en javascript?
http://www.regular-expressions.info/javascript.html
https://developer.mozilla.org/User:q...ar_Expressions
https://developer.mozilla.org/en/Jav...Objects/regexp

__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 10/07/2011, 14:38
zant95
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: $& en expresiones regulares

Muchas gracias, de veras, he estado buscando información en Google y no encontré nada tan completo como eso.
  #4 (permalink)  
Antiguo 10/07/2011, 14:54
zant95
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: $& en expresiones regulares

ummm, por lo que he leído no hay nada para poder modificar un while como $&.
¿Me equivoco?
  #5 (permalink)  
Antiguo 10/07/2011, 14:59
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
Puntos: 1485
Respuesta: $& en expresiones regulares

no, no puedes modificarlo porque dicha variable es solo visible dentro de los string. la solución consiste en crear referencias de grupos y luego en el string utilizar la referencia de ese grupo. en el primer enlace, lee la sección Replacement Text Syntax.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #6 (permalink)  
Antiguo 10/07/2011, 15:09
zant95
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: $& en expresiones regulares

Lo he leido, pero no entiendo como solucionar entonces mi problema:

Código Javascript:
Ver original
  1. function emot(str) {
  2.     var regex = new RegExp(str, 'g');
  3.     this.innerHTML = this.innerHTML.replace(regex, '<img  src=images/$&.png />');
  4. };
  5.  
  6. emot.call(document.body, '!sad|!happy|!dizzy');

Es decir, reemplazar !sad, !happy y !dizzy por imágenes cuyo atributo src al usar $& quede sin el "!".
  #7 (permalink)  
Antiguo 10/07/2011, 15:38
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
Puntos: 1485
Respuesta: $& en expresiones regulares

intenta analizando cualquiera de los siguientes artículos:
http://www.webreference.com/js/column5/values.html
http://javascript.about.com/library/blre15.htm
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #8 (permalink)  
Antiguo 10/07/2011, 16:04
zant95
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: $& en expresiones regulares

Vale, he aprendido un nuevo término, Back References y he estado probando formas y no hay manera. De hecho hasta he intentado con:

Código Javascript:
Ver original
  1. .replace(regex, '<img *src=images/' + '$&'.replace(/!/g,'') + '.png />');

Pero tampoco ha funcionado (sería demasiado fácil).

EDITO: ¿Es buen camino? ¿O con él código que llevo intentando todo el rato no podría?
  #9 (permalink)  
Antiguo 10/07/2011, 16:24
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
Puntos: 1485
Respuesta: $& en expresiones regulares

Cita:
EDITO: ¿Es buen camino? ¿O con él código que llevo intentando todo el rato no podría?
no, no se puede de esa forma. fijate que la referencia $& en si no contiene el string pareado por la expresión. según como yo lo veo, replace inserta el string $& cuando tiene una coincidencia y luego internamente el motor RegExp busca las referencias especiales y las reemplazas por el contenido. este paso es un proceso interno y no se puede tocar. aqui una demostración que ese método no funciona.

Código:
"!happy o !sad".replace(/!happy|!sad/g, console.log("$&"));

"!happy o !sad".replace(/!happy|!sad/g, (function(capture){console.log(capture);})("$&"));
nótese que en ambos códigos se imprime en la consola el string "$&" en lugar del string capturado por la expresión. la única forma que funciona hacer un replace al string capturado es si en lugar de pasar un string, pasaras una función en el segundo parámetro. en los enlaces que antes señalé habla respecto el segundo argumento. no obstante, aunque es posible mediante una función, el método que señale con backreference de grupos no requiere hacer ese proceso.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #10 (permalink)  
Antiguo 10/07/2011, 16:35
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: $& en expresiones regulares

Mmm, yo lo veo más fácil que todo eso, creo. A ver así:
Código Javascript:
Ver original
  1. var rgxp = new RegExp('!(sad|happy|dizzy)', 'g');
  2. '!happy'.replace(rgxp, '<img src="images/$1" />'); // "<img src="images/happy" />"
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #11 (permalink)  
Antiguo 10/07/2011, 16:53
zant95
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: $& en expresiones regulares

Muchísimas gracias a todos, he resuelto el problema con el código que proporcionó _cronos2.

Al final he aplicado los conocimientos adquiridos de otros post para elaborar esto:

Código Javascript:
Ver original
  1. var css = document.createElement('style');
  2. css.type = 'text/css';
  3. css.innerHTML = '.Meme-icon{background: url("images/sprite.png") no-repeat; width: 30px; height: 30px; background-color:transparent; display:inline; border-width:0px; } .Meme-angry{ background-position: 0 0; } .Meme-awesome{ background-position: 0 -31px; }';
  4. document.head.appendChild(css);
  5.  
  6. function reMeme() {
  7.     var rgxp = new RegExp('!(angry|awesome)', 'g');
  8.     document.body.innerHTML = document.body.innerHTML.replace(rgxp, '<input type="button" class="Meme-icon Meme-$1" title="$1" />');
  9. }

Ahora me falta recurrir a los nodos como @zerokilled mencionó en este tema.

Saludos.

Etiquetas: expresiones, regulares
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 08:48.