1

我需要使用什么正则表达式来纠正

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 新手。

4

1 回答 1

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可能不好的更多详细信息,请参阅此答案

您还可以删除default案例陈述中多余的部分。但是,我怀疑您想要的“改进”正在减少行数。鉴于这=-*/是JavaScript 中的运算符(而不是方法),我想不出任何方法来避免进行四个计算(即 aswitchif/else if)。

而在 Ruby 中,例如,您可以使用它array[0].send(action,array[1])来涵盖所有四种情况;)

于 2012-04-24T14:38:29.537 回答