用反斜杠单引号替换单引号

bob*_*eno 46 ruby string

我有一个非常大的字符串需要转义它中的所有单引号,所以我可以将它提供给JavaScript而不会让它失望.我无法控制外部字符串,因此无法更改源数据.

例:

Cote d'Ivoir  -> Cote d\'Ivoir  
Run Code Online (Sandbox Code Playgroud)

(实际的字符串很长,包含很多单引号)

我正在尝试通过使用gsub字符串,但无法让它工作:

a = "Cote d'Ivoir"
a.gsub("'", "\\\'")
Run Code Online (Sandbox Code Playgroud)

但这给了我:

=> "Cote dIvoirIvoir"
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

a.gsub("'", 92.chr + 39.chr)
Run Code Online (Sandbox Code Playgroud)

但得到了相同的结果; 我知道它与正则表达式有关,但我从来没有得到那些.

ste*_*lag 58

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

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

  • @Dave:`p("Cote d'Ivoir".gsub("'",%q(\\\'))).size`返回13.(IRB使用\\进行转义 - \可见). (7认同)
  • 实际上你的例子返回"Cote d \\'Ivoir"而不是"Cote d \'Ivoir"这是期望的结果. (5认同)

Cho*_*ett 20

问题是\'gsub替换中意味着"匹配后字符串的一部分".

您可能最好使用块语法:

a = "Cote d'Ivoir"
a.gsub(/'/) {|s| "\\'"}
# => "Cote d\\'Ivoir"
Run Code Online (Sandbox Code Playgroud)

或哈希语法:

a.gsub(/'/, {"'" => "\\'"})
Run Code Online (Sandbox Code Playgroud)

还有hacky解决方法:

a.gsub(/'/, '\#').gsub(/#/, "'")
Run Code Online (Sandbox Code Playgroud)