将单引号replace为反斜杠单引号

我有一个非常大的string,需要转义所有的单引号,所以我可以喂它到JavaScript而不扰乱它。 我无法控制外部string,所以我不能更改源数据。

例:

Cote d'Ivoir -> Cote d\'Ivoir 

(实际的string很长,包含很多单引号)

我试图通过在string上使用gsub ,但不能得到这个工作:

 a = "Cote d'Ivoir" a.gsub("'", "\\\'") 

但是这给了我:

 => "Cote dIvoirIvoir" 

我也试过:

 a.gsub("'", 92.chr + 39.chr) 

但得到了同样的结果; 我知道这是正则expression式,但我从来没有得到这些。

%q分隔符在这里派上用场:

 # %q(a string) is equivalent to a single-quoted string puts "Cote d'Ivoir".gsub("'", %q(\\\')) #=> Cote d\'Ivoir 

问题在于, gsubreplace意味着“比赛后的一部分string”。

您可能最好使用块语法:

 a = "Cote d'Ivoir" a.gsub(/'/) {|s| "\\'"} # => "Cote d\\'Ivoir" 

或者哈希语法:

 a.gsub(/'/, {"'" => "\\'"}) 

还有一个蛮干的解决办法:

 a.gsub(/'/, '\#').gsub(/#/, "'")