替换为正则表达式

时间:2012-04-24 14:36:44

标签: javascript regex

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

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中的新问题,我很抱歉。

1 个答案:

答案 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中的运算符(而不是方法),我想不出有任何方法可以避免进行四次计算(即switchif/else if

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