0

変数の置換を使用するjsファイルがありますが、逆に置換したいと思います。

ファイルには、置換に使用された「key-value」がすでに含まれているため、最初にそれらを抽出してから、置換を実行します。

これはファイルです(たとえば):

.......
//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
......

'key-value'行の前後にコメントを追加し、次のルビーコードを使用して置き換えます。

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