在JavaScript中讲述正则表达式解析异常

前端之家收集整理的这篇文章主要介绍了在JavaScript中讲述正则表达式解析异常前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在编写一个允许用户指定正则表达式的应用程序.当然,用户会犯错误,因此我需要一种方法来处理不可解析的正则表达式,并为用户提供有关如何解决问题的可操作建议.

我遇到的问题是新的RegExp引发的异常(“可怕的东西”)对正则表达式n00bs没有帮助,并且每个浏览器都有不同的消息.例如:

鉴于:

try{
    new RegExp("(pie");
}catch(e){
    console.log(e.message);
}

> Firefox抛出“未终结的括号”.
> Safari抛出“失踪”)
> Chrome引发“未终止组”

如果这些消息字符串是用户语言本地化的,或者随着时间的推移它们已经漂移,那么我就不会感到惊讶,这使得这是一个疯狂的结,可以解决exception.message.

我的目标是捕捉异常,弄清楚它的真正含义,并提出一个更适合初学者的消息. (最后突出显示了无与伦比的paren,在这个例子中.)

我应该使用其他一些异常标识符吗?有没有更好的方法来分辨这些?如果没有这一切,有没有人只是收集了几个最流行的浏览器中所有这些字符串的内容

解决方法

想法:在运行时全部计算出来.例如.
var tellMeWhatIDidWrong = (function() {

    var tests = {
        '(': 'You did not close your group... duh!',')': 'You seem to have an unmatched parenthesis.','*': 'That token is illegal in that position'
    };

    var errors = {};

    for (var i in tests) {
        try { RegExp(i); } catch(e) { 
            errors[String(e).split(':').pop()] = tests[i];
        }
    }


    return function(regexStr) {
        try { RegExp(regexStr); } catch(e) {
            e = String(e).split(':').pop();
            if (e in errors) {
                return errors[e];
            }
            return 'Unknown error';
        }
        return 'Nothing -- it is fine!';
    };

}());

tellMeWhatIDidWrong('(abc?'); // -> "You did not close your group... duh!"

当然,只有当浏览器的内置错误报告足够具体时,这才能正常工作.他们中的许多人都很糟糕.例如. Opera没有提供任何关于这个问题的提示,所以上面的内容不会很好,任何其他解决方案都不会依赖Opera的本机错误消息.

我建议将regexps发送到运行node.js的应用程序并获取不错的V8错误消息:)

猜你在找的JavaScript相关文章