替换为正则表达式

Replace with the regular expression

本文关键字:正则表达式 替换      更新时间:2023-09-26

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

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

您可以使用以下任一方法:

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 中的运算符(而不是方法),我想不出任何方法来避免有四个计算(即switchif/else if)。

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