我已经有了一个功能运行的用户产生的Regex.但是,如果用户进入regex不会运行,然后它停止和落。我已经试图包裹线在一个尝试/抓块,但可惜没有发生。

如果有帮助,我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>
有帮助吗?

解决方案

尝试这个新的RegExp抛出异常

        正则表达式

    <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 = new RegExp('gr[');

'['是一个特殊的角色,所以它需要逃脱。还有这条线不是包裹在尝试...赶上的,所以你还得到的错误。

编辑:你也可以添加一个

alert(e.message);

在赶条款以看到错误的消息。这是用于所有类型的错误在javascript。

编辑2:OK,我需要更仔细地阅读问题,但答案是仍然存在。例代码的犯罪行为不包裹在尝试...抓块。我把它放在那里并没有得到错误的歌剧9.5,FF3和IE7.

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

将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

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

你的RegExp没有关闭[

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top