Ruby 将单引号替换为反斜杠单引号

Ruby 将单引号替换为反斜杠单引号,ruby,string,Ruby,String,我有一个非常大的字符串,需要对其中的所有单引号进行转义,这样我就可以将它提供给JavaScript而不会打乱它。 我无法控制外部字符串,因此无法更改源数据 例如: Cote d'Ivoir -> Cote d\'Ivoir (实际字符串很长,包含许多单引号) 我试图通过在字符串上使用gsub来解决此问题,但无法使其正常工作: a = "Cote d'Ivoir" a.gsub("'", "\\\'") 但这给了我: => "Cote dIvoirIvoir" 我还尝试:

我有一个非常大的字符串,需要对其中的所有单引号进行转义,这样我就可以将它提供给JavaScript而不会打乱它。 我无法控制外部字符串,因此无法更改源数据

例如:

Cote d'Ivoir  -> Cote d\'Ivoir  
(实际字符串很长,包含许多单引号)

我试图通过在字符串上使用
gsub
来解决此问题,但无法使其正常工作:

a = "Cote d'Ivoir"
a.gsub("'", "\\\'")
但这给了我:

=> "Cote dIvoirIvoir"
我还尝试:

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

但得到了同样的结果;我知道这与正则表达式有关,但我从来没有得到过它们。

问题是
\
gsub中,替换意味着“匹配后字符串的一部分”

您可能最好使用块语法:

a = "Cote d'Ivoir"
a.gsub(/'/) {|s| "\\'"}
# => "Cote d\\'Ivoir"
或哈希语法:

a.gsub(/'/, {"'" => "\\'"})
还有一个棘手的解决办法:

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

%q分隔符在这里很有用:

# %q(a string) is equivalent to a single-quoted string
puts "Cote d'Ivoir".gsub("'", %q(\\\')) #=> Cote d\'Ivoir
#准备一个包含[abcd\efg]的文本文件
需要“路径名”
反斜杠_text=Pathname(“/path/to/the/text/file.txt”).readlines.first.strip
#放置反斜杠文本=>abcd\efg
未斜杠_text=“abcd'efg”
未斜杠的\u text.gsub(“”,Regexp.escape(%q | \')==反斜杠的\u text\35true
#放置未斜杠的\u text.gsub(“”,Regexp.escape(%q | \'\124;))=>abcd\efg

实际上,您的示例返回的是“Cote d\\'Ivoir”而不是“Cote d\'Ivoir”,这是所需的结果。@Dave:
p(“Cote d'Ivoir”.gsub(“,%q(\\\”))。size
返回13。(IRB使用\\使转义-\可见)。为了在不使用%q分隔符的情况下使用此转义符,您的替换项将是
.gsub(“'”,“\\\\”)
。五个反斜杠和一个撇号也返回相同的结果。无论如何,我更喜欢@steenslag的答案,更容易阅读这些例子给出的是“Cote d\\'Ivoir”而不是“Cote d\'Ivoir”@DaveSag-记住,在
字符串中,\将需要转义。该字符串包含
\'
,表示为
“\\'”
。这是演示REPL对\\“是放字符串<代码> >“科特迪瓦”<代码> >代码>“CODE D'iViar”> >代码> >代码> STR =“CODE D iViar”“Cytd'iviar” <代码>放置STR CODE D 'iVialy*= nIL >您可能想考虑也避免双引号,有人现在可以通过输入
mynefarious“Country
作为他们的国家来破坏你的程序。这就是Rails对他们的
escape\uJavaScript
helper所做的