Función gsub Ruby

Estoy tratando de crear una etiqueta BBcode [code] para mi foro de Rails, y tengo un problema con la expresión:

param_string.gsub!( /\[code\](.*?)\[\/code\]/im, '
\1

' )

¿Cómo obtengo lo que devuelve la coincidencia de expresiones regulares (el texto entre las tags [código] [/ código]), y escapa todo el html y algunos otros caracteres en él?

He intentado esto:

 param_string.gsub!( /\[code\](.*?)\[\/code\]/im, '
' + my_escape_function('\1') + '

' )

pero no funcionó. Simplemente pasa “\ 1” como una cadena a la función.

Debes cuidar el comportamiento codicioso de las expresiones regulares. Entonces el código correcto se ve así:

 html.gsub!(/\[(\S*?)\](.*?)\[\/\1\]/) { |m| escape_method($1, $2) } 

El escape_method entonces se ve así:

 def escape_method( type, string ) case type.downcase when 'code' "
#{string}

" when 'bold' "#{string}" else string end end

Alguien aquí publicó una respuesta, pero la ha borrado.

He intentado su sugerencia, y lo hice funcionar con un pequeño cambio. Quienquiera que seas, gracias! 🙂

Aquí está

 param_string.gsub!( /\[code\](.*?)\[\/code\]/im ) {|s| '
' + my_escape_function(s) + '

' }

Simplemente puede usar "

#{$1}

" para su valor de reemplazo.