UNPKG

t-comm

Version:

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

51 lines (47 loc) 1.56 kB
'use strict'; 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;