我的正则表达式把剩下的javascript都搞砸了

我的正则表达式把剩下的javascript都搞砸了,javascript,jquery,regex,string,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(

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

这是我的剧本:

$(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”,一切都会正常进行

我基本上需要得到正则表达式前五个字符后面的内容。我尝试将substr()函数直接添加到它,但似乎没有帮助

我做错了什么?

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片段的一种更简洁的方法是使用括号捕获URL的该部分,这将在
URL\u 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);
}

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

/show:[^/]+/i
应该是:

/show:[^\/]+/i

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

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

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

<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>

var a='show:something';
url_param=a.match(/show:[^/]+/i);
show_number=url_参数子字符串(5);
警报(显示编号);
但是,第二个版本确实有效

<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>

var a='show:something';
url_param=a.match(/show:[^/]+/i);
show_number=url_参数[0]。子字符串(5);
警报(显示编号);
更好的方法可能是显式的,它处理空白,检查字符串的开头和结尾,并进行模式匹配提取

<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>

var a='show:something';
url_param=a.match(/^\s*显示:\s*([^/]+)\s*$/i);
show_number=url_参数[0]。子字符串(5);
警报(显示编号);

雅各布:这对我来说还行(我认为这是正确的,因为字符类中的正斜杠不应该终止正则表达式),但反斜杠不会有什么坏处。你还应该确保url_参数不为null。如果匹配失败,它将返回null,而不是空数组。在这种情况下,检查null就足够了,因为RegExp需要捕获的组。