Parsing is performed according to RFC 2396
<pre> ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))? 12 3 4 5 6 7 8 9
2 isolates scheme 4 isolates authority 5 isolates path 7 isolates query 9 isolates fragment </pre>
This was originally a state-machine; it turned out to be a lot faster (~40%) when unwound like this instead.
See Implementation
Parsing is performed according to RFC 2396
<pre> ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))? 12 3 4 5 6 7 8 9
2 isolates scheme 4 isolates authority 5 isolates path 7 isolates query 9 isolates fragment </pre>
This was originally a state-machine; it turned out to be a lot faster (~40%) when unwound like this instead.