anchor.diff:     * Normalize the given path
      */
     RegExp _pathRegexp(String path) {
  -    var normal = path.replaceAll(new RegExp(r'\/\('), r'(?:/')
  -                .replaceAllMapped(new RegExp(r'(\/)?(\.)?:(\w+)(?:(\(.*?\)))?(\?)?(\*)?'), (Match m) {
  -                  var optional = m[5] != null;
  -                  var slash = (m[1] != null)? m[1] : '';
  -                  var format = (m[2] != null)? m[2] : '';
  -                  var capture = m[4];
  -                  var star = m[5];
  -                  _keys.add({'name': m[3], 'optional': optional});
  +    var normal = path
  +                .replaceAllMapped(new RegExp('\{([^}]+)\}'), (Match m) {
  +                   var key = m[1];
  +                   var optional = false;
  +                  _keys.add({'name': key, 'optional': optional});
   
  -                  var result = '';
  -                  result += optional? '' : slash;
  -                  result += '(?:';
  -                  result += optional? slash : '';
  -                  result += format;
  -                  result += (capture != null)? capture : (format.length > 0)? '([^/.]+?)' : '([^/]+?)';
  -                  result += ')';
  -                  result += (star != null)? '(/*)?' : '';
  +                  var result = '(.+)';
                     return result;
  -               })
  -               .replaceAll(new RegExp(r'\*'), r'(.*)');
  +               });
       var result = new RegExp(r'^' + normal + r'$');
  -
  -//    /\{([^}]+)\}/
  -//
  -//    /        - delimiter
  -//    \{       - opening literal brace escaped because it is a special character used for quantifiers eg {2,3}
  -//    (        - start capturing
  -//    [^}]     - character class consisting of
  -//        ^    - not
  -//        }    - a closing brace (no escaping necessary because special characters in a character class are different)
  -//    +        - one or more of the character class
  -//    )        - end capturing
  -//    \}       - the closing literal brace
  -//    /        - delimiter
       return result;
     }
   }
positive.code:     this.routeFn = routeFn;
      if (path.isNotEmpty) {
        _reg = _pathRegexp(path);
      }
    }
  
  
negative.code:     var result = false;
      if (_reg != null) {
        Iterable<Match> matches = _reg.allMatches(path);
        if (_keys.isNotEmpty) {
          for (var i = 0; i < matches.length; i++) {
            var key = _keys[i];
            var m = matches.elementAt(i);
            var val = m[i+1];
            if (key != null) {
              _params[key['name']] = val;
            }
          }
        }
        result = matches.length > 0;
  