0

我有一个 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)错误。

如何解决?

4

0 回答 0