正则表达式 - 获取没有哈希的查询字符串

时间:2015-06-26 15:46:46

标签: javascript regex url query-string fragment-identifier

需要能够传入URL,并且正则表达式应该只能提取查询字符串。关键部分是省略hashbang 之后的任何事情

这是我到目前为止所做的,它忽略了哈希,但之后仍然得到文本。它仍然可以在第一个?之前获得所有内容。

/([^&=#]+)=?([^&#]*)/g

注意:我知道window.location.search,但我需要能够传入任何网址字符串。

3 个答案:

答案 0 :(得分:0)

如果要从字符串中提取URL的各个部分,RegExp是该作业的错误工具。有太多奇怪的案例,浏览器有一些简单的内置解析URI的方法:

function parseUri(uri) {
    var a = document.createElement('a');
    a.href = uri;
    return {
        protocol: a.protocol,
        host: a.host,
        hostname: a.hostname,
        port: a.port,
        pathname: a.pathname,
        search: a.search,
        hash: a.hash
    };
}

这个代码在遇到如下的URI时不会中断:

'http://www.foo.com???#?foo=bar&fizz=buzz#'

可以用作你的情况:

parseUri('http://www.foo.com???#?foo=bar&fizz=buzz#').search; // '???'

答案 1 :(得分:-1)

您无法使用正则表达式:

var url='http://www.somewhere.com/#something?other&moreStuff';
var index=url.indexOf('#');
var whatIwant = url.substring(index+1);

或者来自你的正则表达式:

([^#]+)=?([^&#]*)

答案 2 :(得分:-1)

要获取查询字符串,这个就足够了。

\?.*

如果你想更具体一点,你可以试试这个:

\?(([a-zA-Z]+(=[a-zA-Z])?)&?)+

第一个字符标记查询字符串start(?),后面跟着key = value接受没有值定义的键(([[[ - a-zA-Z])?负责使其成为可选项)。它可能会有所改进,但它是更复杂事物的起点。另外,请注意我只假设由大写和小写字母组成的值。你也可以为它添加数字。