Ruby gsub non sfugge alle virgolette singole

Non capisco cosa sta succedendo qui. Come dovrei alimentare gsub per ottenere la stringa “Yaho \ ‘o”?

>> "Yaho'o".gsub("Y", "\\Y") => "\\Yaho'o" >> "Yaho'o".gsub("'", "\\'") => "Yahooo" 

\ ‘significa $’ che è tutto dopo la partita. Sfuggi \ ancora e funziona

 "Yaho'o".gsub("'", "\\\\'") 
 "Yaho'o".gsub("'", "\\\\'") 

Perché stai sfuggendo al personaggio di fuga oltre a sfuggire alla singola citazione.

Anche questo lo farà, ed è un po ‘più leggibile:

 def escape_single_quotes(str) str.gsub(/'/) { |x| "\\#{x}" } end 

Se vuoi sfuggire sia a una virgoletta singola che a una barra rovesciata, in modo che tu possa incorporare quella stringa in una stringa di ruby ​​con virgolette doppie, allora la seguente cosa farà per te:

 def escape_single_quotes_and_backslash(str) str.gsub(/\\|'/) { |x| "\\#{x}" } end