public static CustomUriRequest TryParse([CanBeNull] string uri) {
if (uri?.StartsWith(CustomUriSchemeHelper.UriScheme, StringComparison.OrdinalIgnoreCase) != true) {
return null;
}
var s = uri.SubstringExt(CustomUriSchemeHelper.UriScheme.Length);
var m = Regex.Match(s, @"^/((?:/[\w\.-]+)+)/?([?&][^#]*)?(?:#(.*))?");
return m.Success ? new CustomUriRequest {
Path = m.Groups[1].Value.Substring(1).ToLowerInvariant(),
Params = HttpUtility.ParseQueryString(m.Groups[2].Value),
Hash = m.Groups[3].Value
} : null;
}
}