Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: Ali Baba en 17 Julio 2018, 23:22 pm



Título: expresión regular que sustituye una palabra por el valor de una variable
Publicado por: Ali Baba en 17 Julio 2018, 23:22 pm
Tengo un chat, y quisiera que al colocar !test salga el valor de una variable, que en este caso es el nombre de usuario que la persona eligió para registrarse. Esto lo intento hacer con jQuery.

Código
  1. function unescape2(m){
  2.    m=unescape(m);
  3.    m=m.replace(/</g,'&lt;');
  4.    m=m.replace(/>/g,'&gt;');
  5.  
  6. m=m.replace(/!code(.*)/ig, function(m, gg) {
  7.    if (gg == "" ) return m;
  8.    else return "<div style=\"font-family:monospace; color:#fff; display:inline-block; padding:4px; background-color:#000;\">" + gg + "</div>";
  9. });
  10.  
  11. m=m.replace(/!anc(.*)/ig, function(m, gg) {
  12.    if (gg == "" ) return m;
  13.    else return "<div class=\"anunciacion oficial\">" + gg + "</div>"
  14. });
  15.  
  16. m=m.replace(/#meneo(.*)/ig,function(m,gg){
  17. if(gg=='') return m;
  18. return "<div style='display:inline-block;' class='shke'>"+gg+"</div>"
  19. });
  20.  
  21. m=m.replace(/#uppi(.*)/ig,function(m,gg){
  22. if(gg=='') return m;
  23. return "<div style='-webkit-transform:rotate(-180deg); -moz-transform:rotate(-180deg); -o-transform:rotate(-180deg); transform:rotate(-180deg); display:inline-block;'>"+gg+"</div>"
  24. });
  25.  
  26.    return m ;
  27. }

vi por internet esa funcion, que lo que hace es que al colocarle cualquiera de los comandos expresados en la expresión regular, se va agregar alguna clase o estilo a la cadena de texto que le sigue, creando cualquier efecto, quiero hacer lo de sustituir una palabra con el valor de una variable, que en este caso es

Código
  1. var user_nick = $('#log_us').val();

Eso recoge el valor que obtiene el imput con id log_us, que a su vez es el nombre de usuario de la persona. Entonces quisiera que al poner en el chat Hola !test salga el nombre de usuario de la persona que lo lee y no el comando !test


Título: Re: expresión regular que sustituye una palabra por el valor de una variable
Publicado por: srWhiteSkull en 18 Julio 2018, 16:30 pm
Entiendo, corrígeme si me equivoco, que lo que quieres es sustituir una palabra clave según se escriba por un valor. De ser así, simplemente tienes que coger el evento de pulsar tecla (cuando suelta la tecla) y ahí haces el replace.

Ejemplo:
https://codepen.io/WhiteSkull/pen/KBgdZe

Este tipo de cosas es mejor haciéndolas sin JQuery porque no requiere un código complejo y a efectos de rendimiento es lo mejor.


Título: Re: expresión regular que sustituye una palabra por el valor de una variable
Publicado por: Ali Baba en 19 Julio 2018, 04:09 am
No, porque eso lo cambia antes de que se envíe, y yo quiero que lo cambie una vez que ya esté el mensaje escrito.

Código
  1. m=m.replace(/!anc(.*)/ig, function(m, gg) {
  2.    if (gg == "" ) return m;
  3.    else return "<div class=\"anunciacion oficial\">" + gg + "</div>"
  4. });

la linea que hace el segundo return, es el mensaje que se muestra en pantalla, lo que necesito es la expresión regular que haga el cambio. El parametro gg es el mensaje del usuario y el m es el comando


Título: Re: expresión regular que sustituye una palabra por el valor de una variable
Publicado por: srWhiteSkull en 19 Julio 2018, 07:10 am
No, porque eso lo cambia antes de que se envíe, y yo quiero que lo cambie una vez que ya esté el mensaje escrito.

Código
  1. m=m.replace(/!anc(.*)/ig, function(m, gg) {
  2.    if (gg == "" ) return m;
  3.    else return "<div class=\"anunciacion oficial\">" + gg + "</div>"
  4. });

la linea que hace el segundo return, es el mensaje que se muestra en pantalla, lo que necesito es la expresión regular que haga el cambio. El parametro gg es el mensaje del usuario y el m es el comando

Bueno, si estamos hablando de javascript, el primer argumento 'm' no es necesario, y el segundo argumento es la cadena que coincide con la expresión regular.

Incluso ese if (gg == "") return m sobraría, ya que de no encontrar una cadena que se ajuste a la expresión regular devolvería el mismo valor sin modificar.

En cuanto a realizar el reemplazo cuando se 'envíe' tendría que ser por medio de algo que ejecute la función y creo que mi sugerencia de usar algún evento es la adecuada, y más si piensas enviar la entrada al pulsar ENTER por ejemplo porque eso de usar una expresión regular para que sustituya la cadena automáticamente no le veo sentido sinceramente.

Usar una función en el replace() es por si pretendes transformar las cadenas que se ajusten a la coincidencia descrita en la expresión regular. Por ejemplo si quieres que las ponga en mayúsculas o quieres asignarles un estilo, con lo cual ya no usarías un input sino un div o un textarea.

En resumen, la expresión regular es un conjunto de reglas que se usan para buscar cadenas que se ajustan a estas. En tú caso para que se aplique a toda la cadena de la entrada debería ser /!test/g . La g es para indicar que no sólo quieres reemplazar la primera coincidencia, sino todas las que se encuentren en la entrada.