8 javascript regex parameters url jquery
我正在使用jQuery 1.12.我想在我的窗口的URL查询字符串中替换查询字符串参数,或者如果之前不存在则添加参数.我试过以下:
new_url = window.location.href.replace( /[\?#].*|$/, "?order_by=" + data_val )
window.location.href = new_url
Run Code Online (Sandbox Code Playgroud)
但我发现的是,这会消除查询字符串中的所有先前参数,这是我不想要的.如果查询字符串是:
?a=1&b=2
Run Code Online (Sandbox Code Playgroud)
我希望新的查询字符串是:
?a=2&b=2&order_by=data
Run Code Online (Sandbox Code Playgroud)
如果查询字符串是:
?a=2&b=3&order_by=old_data
Run Code Online (Sandbox Code Playgroud)
它会变成:
?a=2&b=3&order_by=data
Run Code Online (Sandbox Code Playgroud)
一个好的解决方案应该处理以下所有问题:
order_by
查询参数的URL ,可选在等号前使用空格。这可以进一步分为order_by
出现在查询字符串的开头、中间或结尾的情况。order_by
查询参数但已经有一个问号来分隔查询字符串的 URL 。order_by
查询参数的 URL,也没有问号来分隔查询字符串。以下将处理上述情况:
if (/[?&]order_by\s*=/.test(oldUrl)) {
newUrl = oldUrl.replace(/(?:([?&])order_by\s*=[^?&]*)/, "$1order_by=" + data_val);
} else if (/\?/.test(oldUrl)) {
newUrl = oldUrl + "&order_by=" + data_val;
} else {
newUrl = oldUrl + "?order_by=" + data_val;
}
Run Code Online (Sandbox Code Playgroud)
如下所示:
if (/[?&]order_by\s*=/.test(oldUrl)) {
newUrl = oldUrl.replace(/(?:([?&])order_by\s*=[^?&]*)/, "$1order_by=" + data_val);
} else if (/\?/.test(oldUrl)) {
newUrl = oldUrl + "&order_by=" + data_val;
} else {
newUrl = oldUrl + "?order_by=" + data_val;
}
Run Code Online (Sandbox Code Playgroud)
您可以使用 jQuery 插件为您完成所有繁重的工作。它将解析查询字符串,并为您重建更新的查询字符串。要处理的代码少得多。
// URL: ?a=2&b=3&order_by=old_data
var order_by = $.query.get('order_by');
//=> old_data
// Conditionally modify parameter value
if (order_by) {
order_by = “data”;
}
// Inject modified parameter back into query string
var newUrl = $.query.set(“order_by”, order_by).toString();
//=> ?a=2&b=3&order_by=data
Run Code Online (Sandbox Code Playgroud)
对于那些使用 Node.js 的人,NPM 中有一个可用的包。
var queryString = require('query-string');
var parsed = queryString.parse('?a=2&b=3&order_by=old_data'); // location.search
// Conditionally modify parameter value
if (parsed.order_by) {
parsed.order_by = 'data';
}
// Inject modified parameter back into query string
const newQueryString = queryString.stringify(parsed);
//=> a=2&b=3&order_by=data
Run Code Online (Sandbox Code Playgroud)