UNPKG

url-lib

Version:

A simple, lightweight string utility for Node and browsers that supports serializing and parsing URLs and query strings.

30 lines (23 loc) 1.21 kB
// Adapted from the Uize.Url module, a part of the UIZE JavaScript Framework. // eslint-disable-next-line no-useless-escape var URL_REG_EXP = /^(([^:\\\/]+:)\/\/(([^:\\\/]*)(:(\d+))?)?)?(([^\?#]*[\\\/])?(([^\\\/\?#]*?)(\.([^\.\?#]+))?))(\?([^#]*))?(#(.*))?$/; // See docs for explanation of each segment var URL_SEGMENTS = ['href', 'fullDomain', 'protocol', 'host', 'hostname', '', 'port', 'pathname', 'folderPath', 'file', 'fileName', 'extension', 'fileType', 'search', 'query', 'hash', 'anchor']; /** * Parses the specified URL string into an object containing properties for the various logical segments. * @param {string | null} [url] URL to parse * @returns {ParsedUrl} Parsed URL as url segments object */ var parseUrl = function parseUrl(url) { var urlSegmentsMatch = url && url.match(URL_REG_EXP); var getUrlSegment = function getUrlSegment(segmentNo) { return urlSegmentsMatch ? urlSegmentsMatch[segmentNo] || '' : ''; }; return URL_SEGMENTS.reduce(function (prevParsedUrl, segmentName, segmentNo) { var parsedUrl = prevParsedUrl; if (segmentName) { parsedUrl[segmentName] = getUrlSegment(segmentNo); } return parsedUrl; }, {}); }; export default parseUrl;