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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top