为什么我在JS脚本中出错?

时间:2015-04-27 16:39:09

标签: java javascript nashorn

我正在运行JS脚本,这是正确的但是在Nashorn中运行时出错。
为什么会出现此错误?
当只编译JS和Nashorn时,它运行正常并且没有显示错误,但这只发生在Nashorn。

JS

function process(val) {
    var isPeso = "(?:k|m|g)b$";
    var normalizado = val.trim().toLowerCase().replace(" ", "");
    var unidade = "";
    var numberPattern = /\d+(\.\d{1,2})?|(Livre)/i;
    var myArray = [];
    if(isPeso.test(myArray)) {
        myArray = normalizado.match(isPeso);
    }
    if (myArray != null) {
        unidade = myArray;
        var i;
        var valores = [];

        if(numberPattern.test(val)) {
            var getNumbers = val.match(numberPattern);

            for (i = 0; i < getNumbers.length - 1; i++) {
                valores.push(getNumbers[i]);
            }
        }
        var out = "";
        //Caso [X ou superior]
        if (normalizado.indexOf("superior") > -1) {
            return valores[0] + unidade + " ou superior";
        }
        //Caso [X até Y] e [até Y]
        else if (normalizado.indexOf("até") > -1) {
            //Caso [até Y]
            if (valores.length == 1) {
                out = "até " + valores[0];
            }
            //Caso [X até Y]
            else {
                out = valores[0] + " até " + valores[1];
            }
        }

        //Caso [X ou Y] ou [X ou Y ou ...]
        else if (normalizado.indexOf("ou") > -1 || normalizado.indexOf("/") > -1) {
            out = valores[0];
            for (i = 1; i < valores.length - 1; i++) {
                out += valores[i];
            }
        }
        //Caso livre
        else if (normalizado.indexOf("*") > -1 || normalizado.indexOf("livre") > -1) {
            out = "Livre";
        }
        //Caso X
        else {
            if (valores.length > 0) {
                out = valores[0];
            }
        }
        if (out.length == 0 || out == null) {
            return "";
        }

        return out + unidade;
    }
}

日志

javax.script.ScriptException: TypeError: (?:k|m|g)b$ has no such function "test" in <eval> at line number 1

2 个答案:

答案 0 :(得分:4)

该字符串不是有效的正则表达式,并且您的数组为空,因此测试将返回false。这是一个有效的版本:

var isPeso = /(?:k|m|g)b$/;

答案 1 :(得分:0)

您的regexp模式无效,您缺少/个字符:

var isPeso = /(?:k|m|g)b$/;

作为提示,您可以向String原型添加一个函数,这样您就可以编写包含方法而不是检查indexOf

String.prototype.contains = function(input) { return this.indexOf(input) != -1; };

这应该让你的代码更具可读性。

@mplungjan在时间响应中击败了我:)