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>