función de rubí gsub
-
22-09-2019 - |
Pregunta
Estoy intentando crear una etiqueta BBCode [code] para mi foro de rieles, y tengo un problema con la expresión:
param_string.gsub!( /\[code\](.*?)\[\/code\]/im, '<pre>\1</pre>' )
¿Cómo consigo lo que los rendimientos de los partidos de expresiones regulares (el texto entre los códigos [/ tag] [Código]), y escapar de todo el HTML y algunos otros personajes en ella?
He intentado esto:
param_string.gsub!( /\[code\](.*?)\[\/code\]/im, '<pre>' + my_escape_function('\1') + '</pre>' )
pero que no funcionó. Simplemente pasa "\ 1" como una cadena a la función.
Solución
Se debe tener cuidado de la conducta codiciosa de las expresiones regulares. Por lo que las miradas correctas de códigos de esta manera:
html.gsub!(/\[(\S*?)\](.*?)\[\/\1\]/) { |m| escape_method($1, $2) }
El escape_method
tendrá el aspecto siguiente:
def escape_method( type, string )
case type.downcase
when 'code'
"<pre>#{string}</pre>"
when 'bold'
"<b>#{string}</b>"
else
string
end
end
Otros consejos
Alguien aquí ha publicado una respuesta, pero se han eliminado.
He intentado su sugerencia, y lo hizo funcionar con un pequeño cambio. Quien quiera que seas, gracias! :)
Aquí es
param_string.gsub!( /\[code\](.*?)\[\/code\]/im ) {|s| '<pre>' + my_escape_function(s) + '</pre>' }
Se puede usar simplemente "<pre>#{$1}</pre>"
para su valor de reposición.