function parsePathQueryFragment(str) {
    var match = PATH_QUERY_FRAGMENT_REGEXP.exec(str);
    return {
      path: match[1].replace(/\0(.)/g, "$1"),
      query: match[2] ? match[2].replace(/\0(.)/g, "$1") : "",
      fragment: match[3] || ""
    };
  }
@param {string} str the path with query and fragment
@returns {{ path: string, query: string, fragment: string }} parsed parts