ルビに二重引用符を挿入するには gsub を使用します
概要
「foo&bar」を「foo」,「bar」に変換したいと思います。
gsubでこれをやろうとしていますが、うまくいきません。
2.3.0 :036 > string = "foo&bar"
=> "foo&bar"
2.3.0 :037 > string.gsub("&", "\"")
2.3.0 :038?>
あらゆる種類の特殊文字をエスケープしてみました。
解決策
さあ、どうぞ
2.2.3 :008 > string = "foo&bar"
=> "foo&bar"
2.2.3 :009 > string = string.split('&')
=> ["foo", "bar"]
2.2.3 :010 > string.to_s
=> "[\"foo\", \"bar\"]"
2.2.3 :013 > string.to_s.gsub(/\[|\]/,'')
=> "\"foo\", \"bar\""
パフォーマンス向上のためのアップデート
私の友人の @engineersmnky がコメントで言ったように、double gsub の方が優れており、彼の言う通りです。ただし、パフォーマンスを向上させるためのさらに優れた方法があります。以下のベンチマークを参照してください。
require 'benchmark'
TO_TEST = 'foo&bar'.split('&').to_s * 999999
def replace_with_regex
puts 'replace_with_regex: ' + (Benchmark.realtime { TO_TEST.gsub(/[\[\]]/, '') }).to_s
end
def replace_no_regex
puts 'replace_no_regex: ' + (Benchmark.realtime { TO_TEST.gsub('[', '').gsub(']', '') }).to_s
end
def replace_with_delete
puts 'replace_with_delete: ' + (Benchmark.realtime { TO_TEST.delete('[]') }).to_s
end
結果
replace_with_regex: 0.48356830099987747
replace_no_regex: 0.29740285399998356
replace_with_delete: 0.0289891009999792
したがって、.delete(‘[]’) を使用する必要があります。