我有一个html文件myfile.html
,其中包含一个带有这样一行的脚本:
var json = '[{"name":"Hydrogen","number":"1","symbol":"H","weight":"1.00794"},{"name":"Helium","number":2,"symbol":"He","weight":4.002602},{"name":"Lithium","number":3,"symbol":"Li","weight":6.941},{"name":"Beryllium","number":4,"symbol":"Be","weight":9.012182},{"name":"Boron","number":5,"symbol":"B","weight":10.811},{"name":"Carbon","number":6,"symbol":"C","weight":12.0107}]';
分配给变量json
的单引号中的字符串实际上会有所不同。我想将此字符串替换为另一个文件myjson.json
的全部内容。
我试过这里的代码: Find and replace in a file in Ruby 和这里: search and replace with ruby regex 这样做:
replace = File.read("myjson.json")
changefile = File.read("myfile.html")
changefile.sub( %r{var json = '[^<]+';}, replace )
但它不起作用。我不确定它的正则表达式是不正确的,还是更多的东西。
阅读下面的回复后,我的第一次尝试是:
replace = File.read("myjson.json")
changefile = File.read("myfile.html")
changefile.sub!(%r{var json = '.+'}, replace)
puts changefile
这确实找到了,但删除了所有var json = ''
并用myjson.json替换它 - 我想保留var json =
并且只替换之后两个单引号之间的内容。所以我试过了:
replace = File.read("myjson.json")
changefile = File.read("myfile.html")
changefile.sub!(%r{var json = '.+'}, "var json = 'replace'")
puts changefile
但这只是将其替换为var json = 'replace'
我想使用原始var json =
来查找位置,但我不希望将其删除。
所以我做了一些我认识的愚蠢和错误,但它确实有效:
replace = File.read("myjson.json")
changefile = File.read("myfile.html")
changefile.sub!(%r{var json = '.+'}, "var json = 'thanksforthehelptinman'")
changefile.sub!(%r{thanksforthehelptinman}, replace)
puts changefile
感谢您的帮助!
答案 0 :(得分:0)
正则表达式不正确,因为正则表达式中保留[
和]
。你需要逃脱它们:
%r{var json = '\[.+\]'}
我不能更准确,因为我不知道你的JSON文件中有什么,但那应该让你进入大球场。
此外,除非您将changefile.sub
指定给某个内容,否则替换将被丢弃。你可以做以下两件事之一:
changefile = changefile.sub(%r{var json = '\[.+\]'}, json)
或mutate changefile
:
changefile.sub!(%r{var json = '\[.+\]'}, json)