为什么我在 JS 脚本中出错?
Why do I get error in JS script?
我是 运行 一个 JS 脚本,这是正确的 但是当我在 Nashorn 中 运行 时出现错误。
为什么这是错误吗?
仅在 Nashorn 之外编译 JS 时,它运行正确并且没有显示任何错误,但这只发生在 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
该字符串不是有效的正则表达式,并且您的数组为空,因此测试 return 为假。这是一个有效的版本:
var isPeso = /(?:k|m|g)b$/;
您的 regexp 模式无效,您缺少 /
个字符:
var isPeso = /(?:k|m|g)b$/;
作为一个提示,您可以向 String 原型添加一个函数,这样您就可以编写包含方法而不是检查 indexOf
String.prototype.contains = function(input) { return this.indexOf(input) != -1; };
这应该使您的代码更具可读性。
@mplungjan 的响应时间超过了我:)
我是 运行 一个 JS 脚本,这是正确的 但是当我在 Nashorn 中 运行 时出现错误。
为什么这是错误吗?
仅在 Nashorn 之外编译 JS 时,它运行正确并且没有显示任何错误,但这只发生在 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
该字符串不是有效的正则表达式,并且您的数组为空,因此测试 return 为假。这是一个有效的版本:
var isPeso = /(?:k|m|g)b$/;
您的 regexp 模式无效,您缺少 /
个字符:
var isPeso = /(?:k|m|g)b$/;
作为一个提示,您可以向 String 原型添加一个函数,这样您就可以编写包含方法而不是检查 indexOf
String.prototype.contains = function(input) { return this.indexOf(input) != -1; };
这应该使您的代码更具可读性。
@mplungjan 的响应时间超过了我:)