t-comm
Version:
专业、稳定、纯粹的工具库
74 lines (67 loc) • 2.79 kB
JavaScript
;
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&%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;