我有一个 js 文件,它使用了一些变量替换,现在我想反过来替换它们。
由于该文件已经包含用于替换的“键值”,所以我想先提取它们然后进行替换。
这是文件(仅作为示例):
.......
//mapperstart
var pj = "shape", qj = "version", rj = "toFixed"; //this line is what I want to find
//mapperend
function (){
//32[rj](10);
}
......
//mapperstart
var kl = ll = "moveend", ml = "move", nl = "movestart"; //this line is what I want to find
//mapperend
......
我在“键值”行之前和之后添加注释,然后使用以下 ruby 代码进行替换:
def replaceVariable(fname)
content=IO.read(fname);
key_value={};
if(matchData=content.scan(/\/\/mapperstart(.+?)\/\/mapperend/m))
matchData.each do |md|
md=md[0].gsub(/\s+var\s+/,'').gsub(';','');
md_ary=md.split(',');
if(md_ary && md_ary.length>0)
md_ary.each do |kv|
if(kv.include?('='))
kv_pair=kv.split('=');
key=kv_pair[0].strip;
value=kv_pair[1].strip;
if(key_value.has_key?(key))
puts 'repeat key:'+key
else
key_value[key]=value
end
end
end
end
end
key_value.each do |key,value|
pattern=Regexp.new('['+key+']');
content.gsub!(pattern,value);
puts 'replace:'+key
end
ext_name=File.extname(fname);
puts ext_name
File.open(fname.gsub(ext_name,'')+"_fix"+ext_name,'aw') do |f|
f.puts content
end
end
end
replaceVariable('../file.js');
但是我总是得到in 'gsub!': failed to allocate memory (NoMemoryError)
错误。
如何解决?