t-comm
Version:
专业、稳定、纯粹的工具库
51 lines (47 loc) • 1.56 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
/**
* 提取链接参数,兼容hash模式和history模式,以及拼接异常情况
* @param {string} [url=''] 地址
* @param {string} [key=''] 可选,若不为空,则提取返回该key对应的参数值
* @returns 地址参数对象,或者是指定参数值
* @example
* const url = 'https://igame.qq.com?name=mike&age=18#/index?from=china&home=china'
* const params = resolveUrlParams(url); // { from: 'china', home: 'china', name: 'mike', age: 18 }
* const paramsAge = resolveUrlParams(url, 'age'); // 18
*/
function resolveUrlParams(url, key) {
if (url === void 0) {
url = '';
}
if (key === void 0) {
key = '';
}
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 _a = kv.split('='),
key = _a[0],
value = _a[1];
if (value) {
// 有值时,才记录
params[key] = value;
}
});
return key ? params[key] : params;
}
exports.resolveUrlParams = resolveUrlParams;