我正在运行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
答案 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在时间响应中击败了我:)