1

myfile.html次のような行を含むスクリプトを含む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}]';

variable に割り当てられる一重引用符内の文字列は、json実際には異なります。この文字列を別のファイルの内容全体に置き換えたいと思いますmyjson.json

私はここでコードを試しました: 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

これは正しく検索されましたが、すべてを削除して myjson.json に置き換えました.2つの一重引用符の間の内容var 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

とは正規表現で予約されているため[、正規表現は正しくありません。]あなたはそれらを脱出する必要があります:

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

JSONファイルの内容がわからないため、正確に説明することはできませんが、それでボールパークに入ることができます。

また、何かに割り当てない限りchangefile.sub、置換は破棄されます。次の2つのいずれかを実行できます。

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

または変異changefile

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