这是一段代码,它将从哈希中提取它并在 URL 中的其他任何地方避免它:
function getLocaleFromHash(url) {
var match = url.match(/#.*[?&]locale=([^&]+)(&|$)/);
return(match ? match[1] : "");
}
而且,您可以在这里看到它适用于所有测试用例:http: //jsfiddle.net/jfriend00/p37Mx/
如果您希望能够在哈希中查找任何参数,您可以使用:
function getParmFromHash(url, parm) {
var re = new RegExp("#.*[?&]" + parm + "=([^&]+)(&|$)");
var match = url.match(re);
return(match ? match[1] : "");
}
在这里看到它的工作:http: //jsfiddle.net/jfriend00/6kgUk/
一个更通用的函数将获取 URL 中的所有参数,如下所示。对于哈希在查询之后并且参数在查询字符串中的普通 URL,它看起来像这样。这是更多的代码,因为它做的更多。它将所有参数提取到一个对象中,您可以在其中通过它的键查找任何参数,并且它的 URL 也将它们全部解码:
function getParmsFromURL(url) {
var parms = {}, pieces, parts, i;
var hash = url.lastIndexOf("#");
if (hash !== -1) {
// remove hash value
url = url.slice(0, hash);
}
var question = url.lastIndexOf("?");
if (question !== -1) {
url = url.slice(question + 1);
pieces = url.split("&");
for (i = 0; i < pieces.length; i++) {
parts = pieces[i].split("=");
if (parts.length < 2) {
parts.push("");
}
parms[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]);
}
}
return parms;
}
对于处理哈希值中和之后的参数的特殊版本?在像 OP 的问题(这不是典型情况)中的哈希值中,可以使用这个:
function getParmsFromURLHash(url) {
var parms = {}, pieces, parts, i;
var hash = url.lastIndexOf("#");
if (hash !== -1) {
// isolate just the hash value
url = url.slice(hash + 1);
}
var question = url.indexOf("?");
if (question !== -1) {
url = url.slice(question + 1);
pieces = url.split("&");
for (i = 0; i < pieces.length; i++) {
parts = pieces[i].split("=");
if (parts.length < 2) {
parts.push("");
}
parms[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]);
}
}
return parms;
}
工作演示:http: //jsfiddle.net/jfriend00/v8cd5/
而且,如果你想要本地选项,你只需这样做:
var parms = getParmsFromURL(url);
var locale = parms["locale"];