编辑代码

const readline = require('readline');

// 创建一个readline.Interface实例来处理输入
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

rl.on('line', (line) => {
    // 调用extractExpressions函数提取输入中的合法表达式
    let expressions = extractExpressions(line);

    // 使用JavaScript的sort函数对表达式按长度进行排序
    expressions.sort((s1, s2) => s2.length - s1.length);

    // 如果表达式列表不为空,则计算并打印最长表达式的结果
    // 否则,打印0
    if (expressions.length > 0) {
        console.log(calc(expressions[0]));
    } else {
        console.log(0);
    }

    rl.close();
});

// 提取合法表达式的函数
function extractExpressions(line) {
    let expressions = [];
    let start = -1;

    for (let i = 0; i < line.length; i++) {
        let cur = line.charAt(i);

        // 如果当前字符是数字
        if (!isNaN(cur)) {
            // 如果开始索引为-1,设置开始索引为当前索引
            if (start === -1) {
                start = i;
            }
        } else if (start !== -1 && "+-*".includes(cur)) {
            // 如果当前字符是操作符,并且前一个字符不是操作符
            // 则将当前索引加1
            if (!"+-*".includes(line.charAt(i - 1))) {
                i++;
            } else {
                // 否则,提取从开始索引到当前索引的子字符串作为一个表达式
                // 并将开始索引重置为-1
                expressions.push(line.substring(start, i));
                start = -1;
            }
        } else {
            // 如果当前字符既不是数字也不是操作符
            // 并且开始索引不为-1,则提取从开始索引到当前索引的子字符串作为一个表达式
            // 并将开始索引重置为-1
            if (start !== -1) {
                expressions.push(line.substring(start, i));
                start = -1;
            }
        }
    }

    // 如果开始索引不为-1,则提取从开始索引到字符串末尾的子字符串作为一个表达式
    if (start !== -1) {
        expressions.push(line.substring(start));
    }

    // 返回提取的表达式列表
    return expressions;
}

// 计算表达式结果的函数
function calc(str) {
    let tokens = [];
    let number = '';

    for (let ch of str) {
        // 如果当前字符是数字,则将其添加到当前数字的末尾
        if (!isNaN(ch)) {
            number += ch;
        } else {
            // 否则,将当前数字和当前操作符添加到元素列表中
            // 并开始构建新的数字
            tokens.push(number);
            tokens.push(ch);
            number = '';
        }
    }
    // 将最后一个数字添加到元素列表中
    tokens.push(number);

    // 遍历元素列表,先进行所有的乘法操作
    for (let i = 0; i < tokens.length; i++) {
        if (tokens[i] === "*") {
            let result = parseInt(tokens[i - 1]) * parseInt(tokens[i + 1]);
            tokens[i - 1] = String(result);
            tokens.splice(i, 2);
            i--;
        }
    }

    // 初始化结果为元素列表的第一个数字
    let result = parseInt(tokens[0]);
    // 遍历元素列表,进行所有的加法和减法操作
    for (let i = 1; i < tokens.length; i += 2) {
        if (tokens[i] === "+") {
            result += parseInt(tokens[i + 1]);
        } else {
            result -= parseInt(tokens[i + 1]);
        }
    }

    // 返回计算结果
    return result;
}