RegEx:从URL提取GET变量

RegEx: Extract GET variable from URL

本文关键字:GET 变量 提取 URL RegEx      更新时间:2023-09-26

RegExp大师们,听从我的召唤!

这可能是超级简单,但我把自己画在一个精神角落。

取一个常规的URL,在?之后分割,它给出了一个字符串,如variable=val&interesting=something&notinteresting=somethingelse,我想提取interesting的值。

我感兴趣的变量的名称可以是另一个变量的子字符串。所以匹配应该是

  • 字符串开头或"&"字符
  • 后面跟着"interesting="
  • 后面跟着我要捕获的字符串
  • 后接另一个"&"或字符串结束

我尝试了一些类似于['^&]interesting=(.*)[&$]但我什么也没得到……

这将在每个get请求的Firefox插件中运行,这意味着jQuery不可用,如果可能的话,我希望避免编写函数所引起的额外字符串操作。

对我来说,这感觉就像一个通用的"用regex提取字符串的一部分",但也许我错了(regex显然不是我的强项)

简单解决方案

var arr = "variable=val&interesting=something&notinteresting=somethingelse".split("&");
for(i in arr) {
var splits = arr[i].split("=");
if(splits[0]=="interesting") alert(splits[1]);
}

也是单行匹配

"variable=val&interesting=something&notinteresting=somethingelse".match(/(?:[&]|^)interesting=((?:[^&]|$)+)/)[1]
function getValue(query)
{
var obj=location.search.slice(1),
    array=obj.split('&'),
    len=array.length;
    for(var k=0;k<len;k++)
    {
        var elm=array[k].split('=');
        if(elm[0]==query)return elm[1];
    }
}

此函数直接提取查询URL,如果存在则返回相应的值。

//usage
var get=getValue('interesting');
console.log(get);//something

如果您正在使用Firefox的Add-on SDK,您可以使用url模块:

https://addons.mozilla.org/en-US/developers/docs/sdk/latest/modules/sdk/url.html

这比使用regex要好得多。