Regex-获取不带哈希的查询字符串

Regex - Get query string without hash

本文关键字:查询 字符串 哈希 获取 Regex-      更新时间:2023-09-26

需要能够传入URL,正则表达式应该能够仅提取查询字符串。不过,关键部分是省略了hashbang后面的任何东西

到目前为止,这就是我所拥有的,它忽略了散列,但之后仍然会得到文本。它仍然获得第一个?之前的所有内容。

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

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

您无法使用regex:

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

或者从您的正则表达式:

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

如果您想从字符串中提取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; // '???'

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

'?.*

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

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

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