1

我有一个 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

我在这里尝试了代码: 在 Ruby 中的文件中查找和替换,在 这里: 搜索并替换为 ruby​​ 正则表达式

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

谢谢您的帮助!

4

1 回答 1

0

正则表达式不正确,因为[and]保留在正则表达式中。你需要逃避它们:

%r{var json = '\[.+\]'}

我不能更准确,因为我不知道你的 JSON 文件中有什么,但这应该让你进入球场。

此外,除非您分配changefile.sub给某些东西,否则替换将被丢弃。您可以执行以下两项操作之一:

changefile = changefile.sub(%r{var json = '\[.+\]'}, json)

或变异changefile

changefile.sub!(%r{var json = '\[.+\]'}, json)
于 2013-01-07T06:25:43.083 回答