【问题标题】:My RegEx is screwing up the rest of my javascript我的 RegEx 搞砸了我的 javascript 的其余部分
【发布时间】:2009-06-23 00:42:27
【问题描述】:

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

这是我的脚本:

$(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() 函数直接添加到它,但这似乎没有帮助。

我做错了什么?

【问题讨论】:

    标签: javascript jquery regex string


    【解决方案1】:

    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_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);
    }
    

    【讨论】:

    • 您还应该确保 url_param 不为空。如果匹配失败,则返回 null,而不是空数组。在这种情况下,检查 null 就足够了,因为 RegExp 需要捕获的组。
    【解决方案2】:

    不,问题不在于反斜杠。 Jacob 是对的,不需要引用。

    问题在于,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>
    

    但是,第二个版本确实有效。

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

    这样更防弹。

    【讨论】:

      【解决方案3】:

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

      /show:[^/]+/i
      

      应该是:

      /show:[^\/]+/i
      

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

      【讨论】:

      • @Jacob:它对我来说效果很好(我相信这是正确的,因为字符类中的正斜杠不应该终止正则表达式),但反斜杠不会受到伤害。
      猜你喜欢
      • 1970-01-01
      • 2018-04-02
      • 1970-01-01
      • 1970-01-01
      • 2014-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多