RegEx 用于从 JavaScript 中的 url 哈希中提取参数
RegEx to extract parameters from url hash in JavaScript
我的网址将如下所示:
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"];
locale = location.hash.match( /[?&]locale=([^&]*)?/ );
locale = ( locale == null ? "" : locale[1] || "" );
会做这个伎俩。我认为不需要.*
,因为您没有指定字符串的开头或结尾。我在你所有的例子上测试了这个正则表达式,它们都正常工作:)
编辑:对不起,在某些情况下无效。现在在所有情况下都是正确的。
如果你真的想在一个正则表达式中做到这一点:
locale = location.hash.match(/([?&]locale=|^((?![?&]locale=).)+$)([^&]*)/)[3];
它与你所有的例子都有效,尽管我认为它效率非常低。
相关文章:
- 根据选项卡内部的文本链接中的哈希ID动态选择jqueryUI选项卡
- AngularJS:获取链接中没有哈希的查询字符串值
- jQuery将查询参数附加到当前哈希中,忽略重复项
- 如何在哈希中设置输入值
- Emberjs :哈希中的函数原型
- 为什么从位置哈希中选择下拉列表在 Chrome 上有效,但不适用于 Firefox、IE 或 Safari
- 我可以比较两个Perl哈希(键和值)提取差异并应用于JavaScript中的哈希吗?
- RegEx 用于从 JavaScript 中的 url 哈希中提取参数
- 如何将帮助程序方法的输出用作 HAML 哈希中的值
- 删除窗口哈希中的 # 以在函数中使用
- 如何从返回的Facebook图形API哈希中提取数据
- 如何使用密钥名称的值来获取密钥名称(在哈希中)
- 如何从哈希中获取数字
- '这'当创建函数存储在哈希中的JS对象时,其作用域为窗口对象
- 按键和返回值从哈希中删除
- 如何将新元素附加到哈希中的同一个键
- 如何在Javascript中从哈希表中提取唯一键
- 在新创建的模型哈希中缺少烬数据映射
- 如何从Ruby中的5字加密哈希中找到SHA1加密字符串
- 如何将插入的字符串/动态属性传递到Javascript哈希中