1

Rails フォーラム用に BBcode [code] タグを作成しようとしていますが、次の式に問題があります。

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

正規表現の一致が返すもの ([code][/code] タグの間のテキスト) を取得し、その中のすべての html とその他の文字をエスケープするにはどうすればよいですか?

私はこれを試しました:

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

しかし、うまくいきませんでした。「\1」を文字列として関数に渡すだけです。

4

3 に答える 3

3

正規表現の貪欲な動作に注意する必要があります。したがって、正しいコードは次のようになります。

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

次にescape_method、次のようになります。

def escape_method( type, string )
  case type.downcase
    when 'code'
      "<pre>#{string}</pre>"
    when 'bold'
      "<b>#{string}</b>"
    else
       string
  end
end
于 2010-01-19T14:32:18.080 に答える
0

単に"<pre>#{$1}</pre>"交換値として使用できます。

于 2010-01-03T05:02:41.053 に答える
0

ここに誰かが回答を投稿しましたが、削除されました。

私は彼らの提案を試してみましたが、小さな変更で機能するようになりました。あなたが誰であれ、ありがとう!:)

ここにあります

param_string.gsub!( /\[code\](.*?)\[\/code\]/im ) {|s| '<pre>' + my_escape_function(s) + '</pre>' }
于 2010-01-02T16:19:28.410 に答える