将单引号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
问题在于, gsub
replace意味着“比赛后的一部分string”。
您可能最好使用块语法:
a = "Cote d'Ivoir" a.gsub(/'/) {|s| "\\'"} # => "Cote d\\'Ivoir"
或者哈希语法:
a.gsub(/'/, {"'" => "\\'"})
还有一个蛮干的解决办法:
a.gsub(/'/, '\#').gsub(/#/, "'")