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}"作为替换值。