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