【问题标题】:Javascript Try/CatchJavascript 尝试/捕获
【发布时间】:2010-09-12 08:25:42
【问题描述】:

我有一个运行用户生成的正则表达式的函数。但是,如果用户输入了一个不会运行的正则表达式,那么它就会停止并跌倒。我已经尝试将该行包装在 Try/Catch 块中,但没有任何反应。

如果有帮助,我正在运行 jQuery,但下面的代码没有它,因为我猜它比这更基础。

编辑:是的,我知道我没有逃避“[”,这是故意的,也是问题的重点。我正在接受用户输入,并且我想找到一种方法来解决此类问题,而不会让应用程序一蹶不振。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
    <title>Regex</title>

    <script type="text/javascript" charset="utf-8">
        var grep = new RegExp('gr[');

        try
        {
            var results = grep.exec('bob went to town');
        }
        catch (e)
        {
            //Do nothing?
        }

        alert('If you can see this then the script kept going');
    </script>
</head>
<body>

</body>
</html>

【问题讨论】:

  • 我确实校对了至少 4 次。这是一个别人在发现你犯的愚蠢错误方面做得更好的例子,你可能自己也遇到过。
  • @Geoffrey:实际上,它是 JavaScript。

标签: javascript regex try-catch


【解决方案1】:

试试这个新的正则表达式抛出异常

正则表达式

    <script type="text/javascript" charset="utf-8">
            var grep;

            try {
                    grep = new RegExp("gr[");
            }
            catch(e) {
                    alert(e);

            }
            try
            {
                    var results = grep.exec('bob went to town');
            }
            catch (e)
            {
                    //Do nothing?
            }

            alert('If you can see this then the script kept going');
    </script>

【讨论】:

    【解决方案2】:

    将 RegExp 初始化放在 try/catch 中会起作用(刚刚在 FireFox 中测试过)

    var grep, results; try { grep = new RegExp("gr["); // your user input here } catch(e) { alert("The RegExpr is invalid"); } // do your stuff with grep and results

    逃离这里不是解决办法。由于这个 sn-p 的目的是实际测试用户生成的 RegExpr,因此您需要将 [ 作为未封闭的 RegExpr 容器来捕获。

    【讨论】:

      【解决方案3】:
      var grep, results;
      
      try {
          grep = new RegExp("gr[");
          results = grep.exec('bob went to town');
      }
      catch(e) {
          alert(e);
      }
      alert('If you can see this then the script kept going');
      

      【讨论】:

        【解决方案4】:

        一种选择是验证用户生成的表达式。那是;您知道会停止脚本的转义字符。

        【讨论】:

          【解决方案5】:

          问题出在这一行:

          var grep = new RegExp('gr[');
          

          '[' 是一个特殊字符,所以需要转义。此外,这一行没有包含在 try...catch 中,因此您仍然会收到错误消息。

          编辑:您还可以添加

          alert(e.message);
          

          在catch 子句中查看错误信息。它对 javascript 中的各种错误很有用。

          编辑 2:好的,我需要更仔细地阅读问题,但答案仍然存在。在示例代码中,违规行没有包含在 try...catch 块中。我把它放在那里,在 Opera 9.5、FF3 和 IE7 中没有出错。

          【讨论】:

          • 你已经错过了问题本身
          • 是的,我现在在保罗的回答中看到了这一点。这是我特别愚蠢的一个简单案例。无论如何感谢您的帮助:)
          【解决方案6】:

          您的 RegExp 没有关闭 [

          在我的 FireFox 中,它永远不会从构造函数返回——看起来像是 RegExp 实现中的一个错误,但如果你提供一个有效的表达式,它就可以工作

          【讨论】:

          • 与 rslite 一样,您错过了实际问题,我想找到一种方法来运行这样的正则表达式并捕获由此产生的错误
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-25
          • 2017-09-12
          • 1970-01-01
          • 2014-12-27
          • 2017-09-05
          • 1970-01-01
          相关资源
          最近更新 更多