我需要使用什么正则表达式来纠正
if (text.indexOf("+") != -1) {
action = "+";
} else if (text.indexOf("-") != -1) {
action = "-";
} else if (text.indexOf("*") != -1) {
action = "*";
} else if (text.indexOf("/") != -1) {
action = "/";
}
此代码 ?
编辑:
如何改进此代码:
switch (action) {
case "+":
result = parseInt(array[0]) + parseInt(array[1]);
break;
case "-":
result = parseInt(array[0]) - parseInt(array[1]);
break;
case "*":
result = parseInt(array[0]) * parseInt(array[1]);
break;
case "/":
result = parseInt(array[0]) / parseInt(array[1]);
break;
default:
break;
}
对于我在js中的新问题,我很抱歉。
答案 0 :(得分:4)
您可以使用以下任何一种:
var action = text.replace(/.*([+*/-]).*/,'$1');
var match = /[*+/-]/.exec(text);
var action = match && match[0];
如果text
中有换行符的可能性,请将第一行更改为:
var action = text.replace(/[\d\D]*([+*/-])[\d\D]*/,'$1');
修改:您可以使用例如
来改进switch
声明
// allow floating point values, and also
// don't accidentally interpret "011" as octal
array[0]*1 + array[1]*1;
有关parseInt
可能不好的原因的详细信息,请参阅this answer。
您还可以删除案例陈述中多余的default
部分。但是,我怀疑你所期望的“改进”是减少线路。鉴于=-*/
是JavaScript中的运算符(而不是方法),我想不出有任何方法可以避免进行四次计算(即switch
或if/else if
)
然而,在Ruby中,您可以使用array[0].send(action,array[1])
来涵盖所有四种情况;)