UNPKG

t-comm

Version:

专业、稳定、纯粹的工具库

74 lines (67 loc) 2.79 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _slicedToArray = require('@babel/runtime/helpers/slicedToArray'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray); /** * 提取链接参数,兼容hash模式和history模式,以及拼接异常情况 * @param {string} [url=''] 地址 * @param {string} [key=''] 可选,若不为空,则提取返回该key对应的参数值 * @returns 地址参数对象,或者是指定参数值 * @example * // 地址使用 search 参数 * resolveUrlParams('https://igame.qq.com?name=mike&age=18'); * // => { name: 'mike', age: '18' } * @example * // 地址使用 hash 参数 * resolveUrlParams('https://igame.qq.com#/?from=china&home=china'); * // => { from: 'china', home: 'china' } * @example * // 地址同时使用 search 和 hash 参数 * resolveUrlParams('https://igame.qq.com?name=mike&age=18#/index?from=china&home=china'); * // => { from: 'china', home: 'china', name: 'mike', age: '18' } * @example * // 通过 key 直接取值 * resolveUrlParams('https://igame.qq.com?name=mike&age=18', 'age'); * // => '18' * @example * // 空 url 时:未传 key 返回 {},传 key 返回 undefined * resolveUrlParams(''); // => {} * resolveUrlParams('', 'age'); // => undefined * @example * // 兼容真实业务地址中带 %3F、& 等异常拼接情况 * resolveUrlParams('https://igame.qq.com/x.html#/index?brandid=b1662364289&amp%3BmultiCfgId=b16623642891663309541'); * // => { brandid: 'b1662364289' } */ function resolveUrlParams() { var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; if (!url) return key ? undefined : {}; // 解码 var link = url; // 提取从第一个问号开始后的字符串内容(含问号) link = link.substring(url.indexOf('?')); // 正则匹配方式提取键值对 // eslint-disable-next-line no-useless-escape var matchList = link.match(/(\?|&)([^\?&]*=[^\?&#]*)/g); if (!matchList) { return key ? undefined : {}; } // 提取多个键值对 var params = {}; var kvList = matchList.map(function (item) { return item.replace(/(\?|&)/g, ''); }); // 移除 ? 或 & 前缀 kvList.forEach(function (kv) { var _kv$split = kv.split('='), _kv$split2 = _slicedToArray__default["default"](_kv$split, 2), key = _kv$split2[0], value = _kv$split2[1]; if (value) { // 有值时,才记录 params[key] = value; } }); return key ? params[key] : params; } exports.resolveUrlParams = resolveUrlParams;