Advertisement
Guest User

Simple `function( ... )` parser on JavaScript

a guest
Sep 25th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var myString = "testFunction( initTask(arg1, arg2) + middlewareTask(arg3) + testEnv(arg6) )";
  2. var Parser = (function(str) {
  3.  
  4.     var moreBrackets = function(part) {
  5.         if (part.indexOf('(') != -1) {
  6.             return true;
  7.         } else {
  8.             return false;
  9.         }
  10.     }
  11.  
  12.     var moreHard = function(part) {
  13.         if (part.indexOf('+') != -1) {
  14.             return true;
  15.         } else {
  16.             return false;
  17.         }
  18.     }
  19.  
  20.     var ArgsCheck = function(subpart) {
  21.         if (subpart.indexOf(',') != -1) {
  22.             return subpart
  23.                 .split(',')
  24.                 .map(function(rawArg){
  25.                     return rawArg.trim();
  26.                 });
  27.         } else {
  28.             return subpart.trim();
  29.         }
  30.     }
  31.  
  32.     var nextCheck = function(part) {
  33.         var workingSubParts = [];
  34.  
  35.         if (moreHard(part)) {
  36.             workingSubParts = part
  37.                 .split('+')
  38.                 .map(function(item){ return item.trim(); });
  39.         } else {
  40.             if (moreBrackets(part)) {
  41.                 workingSubParts = [part];
  42.             } else {
  43.                 workingSubParts = part;
  44.             }
  45.         }
  46.  
  47.         if (typeof(workingSubParts) == typeof([])) {
  48.             return workingSubParts.map(function(parted){
  49.                 return common(parted);
  50.             });
  51.         } else {
  52.             return ArgsCheck(workingSubParts);
  53.         }
  54.     }
  55.    
  56.     var common = function(part) {
  57.         var tmpLevel   = 0;
  58.         var inBrackets = 0;
  59.         var key        = "";
  60.         var value      = "";
  61.  
  62.         for (var i = 0; i < part.length; i++) {
  63.             let char = part[i];
  64.  
  65.             if ( (char != '(') && (char != ')') ) {
  66.                 if (!inBrackets) {
  67.                     key = key + char;
  68.                 } else {
  69.                     value = value + char;
  70.                 }
  71.             } else {
  72.                 if ( (!inBrackets) && (tmpLevel == 0) ) {
  73.                     // dats first `(`
  74.                     inBrackets = 1;
  75.                     tmpLevel   = 1;
  76.                 } else {
  77.                     if (char == '(')
  78.                         tmpLevel += 1;
  79.                     else {
  80.                         tmpLevel -= 1;
  81.  
  82.                         if (tmpLevel == 0)
  83.                             break;
  84.                     }
  85.  
  86.                     value = value + char;
  87.                 }
  88.             }
  89.         }
  90.  
  91.         return [key.trim(), nextCheck(value.trim())];
  92.     }
  93.  
  94.     return common(str);
  95. })(myString);
  96.  
  97. console.log(myString);
  98. console.dir(Parser);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement