code: function (fixedPatterns, part) {
          var lastPattern = "",
              pos = 0;
          if (fixedPatterns.every(function (fixedPattern, index) {
              var lastPatternLength = lastPattern.length;
              lastPattern = fixedPattern || "";
              if (lastPattern) {
                  pos = part.indexOf(fixedPattern, pos + lastPatternLength);
                  // part not found means not matching
                  if (-1 === pos) {
                      return false;
                  }
                  // the first part must match the beginning
                  if (0 === index && 0 < pos) {
                      return false;
                  }
              }
              return true;
          })) {
              /**
               * If empty, we match (because we don't care about the end)
               * Otherwise, it should leads us to the end of the part.
               */
              return !lastPattern || pos + lastPattern.length === part.length;
          }
          return false;
      }
docs: When no * is used, the namePattern must exactly match the part.
  Otherwise the * represents a variable part in the part.
  It may contain as many variable part as necessary.
  
  a*b  matches     (start)a(anything)b(end)
  *b   matches     b(end)
  a*   matches     (start)a
  
  @param {String[]} fixedPatterns
  @param {String} part