Javascript尝试/捕获

Javascript尝试/捕获,javascript,regex,try-catch,Javascript,Regex,Try Catch,我有一个运行用户生成的正则表达式的函数。但是,如果用户输入了一个不运行的正则表达式,那么它就会停止并摔倒。我试着用Try/Catch块来包装线路,但可惜什么也没发生 如果有帮助的话,我正在运行jQuery,但是下面的代码没有,因为我猜它比这更基本一些 编辑:是的,我知道我不是在逃避“[”,这是故意的,也是问题的关键。我接受用户输入,我想找到一种方法来解决此类问题,而不会让应用程序一败涂地 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict

我有一个运行用户生成的正则表达式的函数。但是,如果用户输入了一个不运行的正则表达式,那么它就会停止并摔倒。我试着用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>

正则表达式
var grep=newregexp('gr[');
尝试
{
var results=grep.exec(“鲍勃进城去了”);
}
捕获(e)
{
//什么也不做?
}
警报(“如果你能看到这一点,那么脚本将继续运行”);

这一行有问题:

var grep = new RegExp('gr[');
“[”是一个特殊字符,因此需要对其进行转义。此外,此行未包装在try…catch中,因此仍然会出现错误

编辑:您还可以添加

alert(e.message);
在catch子句中查看错误消息。这对于javascript中的所有类型的错误都很有用


编辑2:好的,我需要更仔细地阅读这个问题,但答案仍然在那里。在示例代码中,有问题的行没有包装在try…catch块中。我将它放在那里,在Opera 9.5、FF3和IE7中没有出现错误。

您的RegExp不会关闭[


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

正则表达式

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

var-grep;
试一试{
grep=newregexp(“gr[”);
}
捕获(e){
警报(e);
}
尝试
{
var results=grep.exec(“鲍勃进城去了”);
}
捕获(e)
{
//什么也不做?
}
警报(“如果你能看到这一点,那么脚本将继续运行”);


一个选项是验证用户生成的表达式。也就是说,您知道的转义字符会使脚本暂停。

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

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');

在这里转义不是解决方案。由于此代码段的目的是实际测试用户生成的RegExpr,因此您需要捕获[作为一个未关闭的RegExpr容器。

您自己也错过了这个问题是的,我现在在Paul的回答中看到了这一点。这是我特别愚蠢的一个简单例子。无论如何,感谢您的帮助:)与rslite一样,您错过了实际问题,我想找到一种方法来运行这样一个regex并捕获结果错误。我至少校对了4次。这是一个别人在发现你犯的愚蠢错误方面做得更好的例子,你可能自己也遇到了。@Geoffrey:事实上,这是JavaScript。

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