사용자 도구

사이트 도구


javascript:maro_pattern

Maro Pattern

removeComment 연습하기

<script>
  class MaroPattern {
    constructor() {
      this.ps = [];
    }
    addPattern(p1) {
      this.ps.push(p1);
    }
    trans01(source) {
      var src = source;
      var out = [];
      this.ps.filter(function (p) { return p.KIND_CD === 'all'; }).forEach(p1 => {
        if (p1.TYPE_CD === 'text') {
          src = src.replaceAll(p1.SEARCH, p1.R_VALUE);
        }
        if (p1.TYPE_CD === 'regEx') {
          let re = new RegExp(p1.SEARCH, 'g');
          src = src.replaceAll(re, p1.R_VALUE);
        }
      });
 
      this.trans02(source);
 
      this.trans03(source);
 
      out = src.split('\n');
      return out.join('\n');
    }
    trans02(source) {
      var block = this.findBlock(source, /<script(.)*>/, '<script(.)*>', '<\/script>');
      console.log(block);
    }
    trans03(source) {
      var block = this.findBlock(source, /with\((sheet)\d*\)/, '{', '}');
      console.log(block);
    }
    findBlock(source, p1, sta, end) {
      var p = new RegExp(p1, 'g');
      var sLine = -1, eLine = -1;
      var block = [];
      var m = source.match(p);
      var line = 0;
      var src = source.split('\n');
      var p2 = new RegExp(sta);
      var p3 = new RegExp(end);
      if (!m) {
        return {};
      }
      for(var k=0; k < m.length; k++) {
        var bStr = [];
        var isFind = false;
        var depth = 0;
        for (var i = line; i < src.length; i++, line++) {
          if (p.test(src[i])) {
            sLine = i;
            isFind = true;
          }
          if(isFind && p2.test(src[i])){
            break;
          }
          if( isFind ){
            bStr.push(src[i]);
          }
        }
        if (isFind) {
          for (var i = line; i < src.length; i++, line++) {
            if (p2.test(src[i]) ){
              depth++;
            }
            if (p3.test(src[i])) {
              depth--;
              if( depth == 0) {
                bStr.push(src[i]);
                eLine = i;
                break;
              }
            }
            bStr.push(src[i]);
          }
        }
        block.push({
          block: bStr.join('\n'),
          block_sLine: sLine,
          block_eLien: eLine
        });
      }
      return block;
    }
    removeComment(source) {
      var src = source.split('\n');
      var out = [];
      for(var i=0; i < src.length; i++) {
 
      }
    }
  }
  var origin = `
  common.jsp
  89
<script>
  with(sheet1) 
  {
    search11;
    if (true) {
 
    }
  }
<\/script>
<script onKK>
<\/script>
<a>
</a>
kkk
`;
 
  let mp = new MaroPattern();
  mp.addPattern({
    TYPE_CD: 'text', // text, regEx
    KIND_CD: 'all', // all, ibSheetFunction, javascript, with
    SEARCH: 'common.jsp',
    R_VALUE: 'common2.jsp',
  });
  mp.addPattern({
    TYPE_CD: 'regEx', // text, regEx
    KIND_CD: 'all', // all, ibSheetFunction, javascript, with
    SEARCH: '[0-9]{2}',
    R_VALUE: '56',
  });
  mp.addPattern({
    TYPE_CD: 'regEx', // regEx
    KIND_CD: 'all', // all, javascript, with
    SEARCH: 'kkk',
    R_VALUE: 'kkkk123',
  });
 
  console.log(mp.trans01(origin));
</script>
javascript/maro_pattern.txt · 마지막으로 수정됨: 2025/04/15 10:05 저자 127.0.0.1