为什么这个jQuery代码不起作用?

时间:2011-06-02 17:33:34

标签: javascript jquery regex replace match

为什么以下jQuery代码不起作用?

$(function() {
    var regex = /\?fb=[0-9]+/g;
    var input = window.location.href;

    var scrape = input.match(regex); // returns ?fb=4

    var numeral = /\?fb=/g;

    scrape.replace(numeral,'');
    alert(scrape); // Should alert the number?
});

基本上我有这样的链接:

http://foo.com/?fb=4

如何首先找到?fb=4,然后只检索号码?

5 个答案:

答案 0 :(得分:5)

请考虑使用以下代码:

$(function() {
    var matches = window.location.href.match(/\?fb=([0-9]+)/i);

    if (matches) {
        var number = matches[1];
        alert(number); // will alert 4!
    }
});

在此测试一个示例:http://jsfiddle.net/GLAXS/

正则表达式仅根据您提供的内容略微修改。已删除g小标记,因为您不会有多个fb=匹配(否则您的网址无效!)。已添加案例i nsensitive flag flag以匹配FB=以及fb=

数字用大括号括起来表示capturing group,这是允许我们使用match的魔法。

如果match与我们指定的正则表达式匹配,它将在第一个数组元素中返回匹配的字符串。其余元素包含我们定义的每个捕获组的值。

在我们的运行示例中,字符串“?fb = 4”匹配,返回数组的第一个值也匹配。我们定义的唯一捕获组是数字匹配器;这就是4包含在第二个元素中的原因。

答案 1 :(得分:4)

如果您只需要获取fb的值,只需使用捕获括号:

    var regex = /\?fb=([0-9]+)/g; 
    var input = window.location.href;

    var tokens = regex.exec(input);

    if (tokens) { // there's a match
        alert(tokens[1]); // grab first captured token
    }

答案 2 :(得分:2)

如何使用following function读取JavaScript中的查询字符串参数:

function getQuerystring(key, default_) {
    if (default_==null)
        default_="";
    key = key.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regex = new RegExp("[\\?&]"+key+"=([^&#]*)");
    var qs = regex.exec(window.location.href);
    if(qs == null)
        return default_;
    else
        return qs[1];
}

然后:

alert(getQuerystring('fb'));

答案 3 :(得分:2)

那么,您想要提供查询字符串,然后根据参数获取其值吗?


我有半心半意提供 Get query string values in JavaScript

但后来我看到a small kid abusing a much respectful Stack Overflow answer

// Revised, cooler.
function getParameterByName(name) {
    var match = RegExp('[?&]' + name + '=([^&]*)')
                    .exec(window.location.search);
    return match ?
        decodeURIComponent(match[1].replace(/\+/g, ' '))
        : null;
}

当你在这里时,只需要调用这个函数。

getParameterByName("fb")

答案 4 :(得分:-3)

如果您是Regex的新手,为什么不试试Program that illustrates the ins and outs of Regular Expressions