gpt4 book ai didi

javascript - RegEx 从 JavaScript 中的 url 哈希中提取参数

转载 作者:行者123 更新时间:2023-11-30 06:57:22 25 4
gpt4 key购买 nike

我的网址将如下所示:

http://example.com/whatever#page?x=1&locale=hu&y=2
http://example.com/whatever#page?x=1&locale=hu
http://example.com/whatever#page?locale=hu
http://example.com/whatever#page?locale=
http://example.com/whatever#page?x=1
http://example.com/whatever#page
http://example.com/whatever

如果未设置,我想获取语言环境参数或空字符串。

我正在尝试类似的东西:

locale = location.hash.replace(/.*(?:[?&]locale=([^&]*))?.*/, "$2");

但我的问题是我找不到适用于所有情况的正确正则表达式(无论是在哈希中有 locale= 还是没有时)

最佳答案

这是一段代码,可以从散列中提取它并避免在 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"];

关于javascript - RegEx 从 JavaScript 中的 url 哈希中提取参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10624762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com