Ruby gsub函数

我正在尝试为我的rails论坛创建一个BBcode [code]标签,我的表达式有问题:

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

' )

如何获取正则表达式匹配返回的内容([code] [/ code]标签之间的文本),并转义所有html和其中的一些其他字符?

我试过这个:

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

' )

但它不起作用。 它只是将“\ 1”作为字符串传递给函数。

你应该注意正则表达式的贪婪行为。 所以正确的代码如下所示:

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

然后escape_method看起来像这样:

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

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

这里有人发布了答案,但他们已将其删除。

我已经尝试了他们的建议,并通过一个小小的改变使它工作。 无论你是谁,谢谢! 🙂

这里是

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

' }

您只需使用"

#{$1}

"作为替换值。