正则表达式查询字符串

时间:2015-07-07 19:01:58

标签: javascript regex

给出以下两个例子:

'123?type=hand' ===> 'type'

'123?type=hand&status=alive' ===> '输入状态'

用英语我想:找到?并删除前面的所有内容。 查看=并删除&之后的所有内容。

在一天结束时,我想要的只是一个字符串,数组,以及任何实际的queryStringVariableNames。没有任何价值。

我认为我过于复杂化了。 :)

以下是我一直在使用的几个片段:

var pattern = /\*(\?)|\*(\&)|(\=)\*/ig;
var pattern = /(.+?\?)/g;

str.replace(pattern, function (matcher, positionOfMatch, item) {
            return '';
});

我开始使用replace的longform,所以我可以更好地了解发生了什么。

修改

我的确切实施结果如下:

function (str) {
  str = str.substr(str.indexOf('?') + 1);

  return str.split('&')
            .map(function (i) {
               return i.substr(0, i.indexOf('='))
            });
}

4 个答案:

答案 0 :(得分:3)

使用字符串操作而不是正则表达式会更容易。这将为您提供一个包含字符串中键的数组:



var str = '123?type=hand&status=alive';

str = str.substr(str.indexOf('?') + 1);
var keys = str.split('&');
for (var i = 0; i < keys.length; i++) {
  keys[i] = keys[i].substr(0, keys[i].indexOf('='));
}

// Show in StackOverflow snippet
document.write(JSON.stringify(keys));
&#13;
&#13;
&#13;

答案 1 :(得分:1)

我这样做:

var result = str.split("?")[1].split("&");

因此,如果您的字符串为123?foo=bar&one=something&nothing=else,那么您将获得一个字符串数组resultfoo=barone=somethingnothing=else

然后result[0]可以访问第一个参数,其密钥可以result[0].split("=")[0]访问,其值可以result[0].split("=")[1]访问。

答案 2 :(得分:1)

您可以使用此阵列并抓取捕获的组#1:

XML::Simple

RegEx Demo

<强>代码:

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

答案 3 :(得分:1)

您可以搜索

的所有实例
(?:\?|&)([^\=]+)(?=\=)

使用&#39; g&#39;改性剂。

示例:

https://regex101.com/r/mM4lR4/2