사용자 도구

사이트 도구


javascript:maro_pattern

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
javascript:maro_pattern [2024/01/30 12:12] taekgujavascript:maro_pattern [2025/04/15 10:05] (현재) – 바깥 편집 127.0.0.1
줄 1: 줄 1:
 +====== Maro Pattern ======
  
 +[[javascript:maro_pattern:remove_comment|removeComment]]
 +[[javascript:maro_pattern:example|연습하기]]
 +
 +<code javascript>
 +
 +<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>
 +</code>