Описание темы:
Получить параметры в URL
1. Указать имя параметра и вернуть значение параметра или пустую строку;2. Если имя параметра не указано, вернуть все объекты параметров или {};
3. При наличии нескольких параметров с одинаковым именем возвращается массив;
Источник темы (отредактировано онлайн):woohoo.now coder.com/practice/ah3…(Ниуке.ком)
Решение 1. Используйте сращивание строк для сопоставления символов;
/* 获取URl中的参数
* @para url
* @para key 参数名*/
function getUrlParam(sUrl, sKey) {
var left= sUrl.indexOf("?") + 1
var right= sUrl.lastIndexOf("#")
var parasString = sUrl.slice(left, right)
var paras = parasString.split('&');
var parasjson = {}
paras.forEach(function (value, index, arr) {
var a = value.split('=');
parasjson[a[0]] !== undefined ? parasjson[a[0]] = [].concat(parasjson[a[0]], a[1]) : parasjson[a[0]] = a[1];
});
let result = arguments[1] !== void 0 ? (parasjson[arguments[1]] || '') : parasjson;
return result
}
Решение 2. Используйте регулярные выражения для сопоставления символов и используйте обычный метод Replace для замены;
function getUrlParam2(sUrl, sKey) {
var result, Oparam = {};
sUrl.replace(/[\?&]?(\w+)=(\w+)/g, function ($0, $1, $2)
console.log('$0:' + $0 + " $1:" + $1 + " $2:" + $2);
Oparam[$1] === void 0 ? Oparam[$1] = $2 : Oparam[$1] = [].concat(Oparam[$1], $2);
});
sKey === void 0 || sKey === '' ? result = Oparam : result = Oparam[sKey] || '';
return result;
}
Здесь отмечены правила:/[\?&]?(\w+)=(\w+)/g(Используйте онлайн-инструмент Regexper, чтобы преобразовать обычный график в наглядный график, который легко понять)
Решение 3. Используйте регулярные выражения для сопоставления символов и используйте для сборки обычный метод Exec;
function getUrlParam3(sUrl, sKey) {
var resObj = {};
var reg = /(\w+)=(\w+)/g;
while (reg.exec(sUrl)) {
resObj[RegExp.$1] ? resObj[RegExp.$1] = [].concat(resObj[RegExp.$1], RegExp.$2) : resObj[RegExp.$1] = RegExp.$2;
}
if (sKey) {
return (resObj[sKey] ? resObj[sKey] : '');
}
return resObj;
}
Здесь отмечены правила:/(\w+)=(\w+)/g
API-интерфейс исполняемого метода MDN RegExp:developer.Mozilla.org/this-cn/docs/…
тестовое задание:
let url = 'http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe'
let result = getUrlParam(url)
let result2 = getUrlParam(url, 'key')
console.log(result)
console.log(result2)
Вывод консоли выглядит следующим образом:
AC!!!