我的RegEx搞砸了我的其他javascript

时间:2009-06-23 00:42:27

标签: javascript jquery regex string

好的,所以我正在使用一个小小的正则表达式 - 这是我的第一次,请,温柔 - 我遇到了一个问题,我可以设置一个变量,但如果我尝试做任何事情这个变量会导致问题。

这是我的剧本:

$(document).ready(function () {
    var show_number;
    var url_param;

    $("a[rel=more]").live("click", function(){
        url_param = $(this).attr("href").match(/show:[^/]+/i);
        show_number = url_param.substr(5);

        alert(show_number);

        return false;
    });
});

现在不是按照它应该的方式显示警报,而只是跟随链接。但是,如果我摆脱“show_number”变量并将其设置为警告“url_param”一切正常。

我基本上需要了解RegEx的前五个字符之后的内容。我尝试直接向它添加substr()函数,但这似乎没有帮助。

我做错了什么?

3 个答案:

答案 0 :(得分:3)

match()返回一个数组,而不是一个字符串,所以至少你需要这样的东西:

url_param = $(this).attr("href").match(/show:[^/]+/i);
if (url_param && url_param.length > 0) {
    show_number = url_param[0].substr(5);
    alert(show_number);
}

在“show:”之后获取网址的一种更简洁的方法是使用括号来捕获网址的这一部分,最终会在url_param[1]中显示:

url_param = $(this).attr("href").match(/show:([^/]+)/i);
if (url_param && url_param.length > 0) {
    show_number = url_param[1];
    alert(show_number);
}

答案 1 :(得分:0)

我认为问题在于JavaScript解释器无法解析您的代码。你的正则表达式:

/show:[^/]+/i

应该是:

/show:[^\/]+/i

因为正斜杠过早地结束了你的正则表达式。要验证这一点,您应该查看浏览器提供的任何JavaScript错误控制台,以查看是否收到JavaScript错误。

答案 2 :(得分:0)

不,问题不在于反斜杠。雅各是正确的,它不需要引用。

问题是,匹配确实会返回一个数组。因此,以下简单的测试用例不起作用。

<html>
<script type="text/javascript">
var a='show: something';
url_param = a.match(/show:[^/]+/i);
show_number = url_param.substring(5);
alert (show_number);
</script>
</html>

但是,第二个版本可以工作。

<html>
<script type="text/javascript">
var a='show: something';
url_param = a.match(/show:[^/]+/i);
show_number = url_param[0].substring(5);
alert (show_number);
</script>
</html>

更好的是显式处理空格,检查字符串的开始和结束,并进行模式匹配提取。

<html>
<script type="text/javascript">
var a='show: something';
url_param = a.match(/^\s*show:\s*([^/]+)\s*$/i);
show_number = url_param[0].substring(5);
alert (show_number);
</script>
</html>

这有点防弹。