在Ruby&#39s的gsub中转义双引号

时间:2016-06-05 22:15:36

标签: ruby regex gsub

我试图将一些内联JSON缩小为HTML minifier的一部分。我该怎么做:

>      {"@context": "http://schema.org",        "@type": "WebSite"}      <

进入这个:

>{ "@context": "http://schema.org", "@type": "WebSite" }<

我已经尝试gsub[/\", \s+\"/, ", "]gsub[/"\"}"/, "\" }"]gsub[/"\"}"/, "\" }"],但错误已经出来。

syntax error, unexpected [, expecting ']' (SyntaxError)
[/"\"}"/, "\" }"]
 ^
syntax error, unexpected ',', expecting keyword_end
syntax error, unexpected ',', expecting keyword_end
syntax error, unexpected ']', expecting keyword_end

更新

我现在也试过这些,但没有好处:

[/>\s+{/, ">{ "]    # >      {     => >{
[/}\s+>/, " }<"]    # }      <     => }<
[%r/{"/, '{ %r/"']  # {"           => { "
[%r/"}/, '%r/" }']  # "}           => " }
[%r/",\s+/, ", "]   # ,        "   => , "

导致:

syntax error, unexpected [, expecting ']' (SyntaxError)
[/}\s+>/, " }<"]    # }      <     => }<
 ^

3 个答案:

答案 0 :(得分:4)

我建议采用不同的方法:

require JSON
str = '{"@context": "http://schema.org",        "@type": "WebSite"}'
new_str = JSON.parse(str).to_json
puts new_str

> {"@context":"http://schema.org","@type":"WebSite"}

答案 1 :(得分:1)

使用%r Regexp文字来转义所有字符,但只有一个:

a = '{"@context": "http://schema.org",        "@type": "WebSite"}'

a.gsub(%r/{"/, '{ "').gsub(%r/"}/, '" }').gsub(/\s+/, ' ')
#=> { "@context": "http://schema.org", "@type": "WebSite" }

使用%r{ ... }转义除{}之外的所有字符,同样适用于/(等...

答案 2 :(得分:-1)

信用:Escaping '“' with regular double quotes using Ruby regex

它会逃脱双引号

gsub(/("|")/, 34.chr)