如何将三元表达式解析成数组?

作者站长头像
站长
· 阅读数 7

件数>30?200:件数>25?100:75期望结果: ['件数','>','30','?','200',':','件数','>','25','?','100',':','75']

回复
1个回答
avatar
test
2024-07-05

你可以通过正则表达式将这个三元表达式解析成数组:

function parseTernaryExpression(expression) {
    const regex = /([a-zA-Z]+|\d+|[<>?=]+)/g;
    return expression.match(regex);
}

const expression = "件数>30?200:件数>25?100:75";
const parsedArray = parseTernaryExpression(expression);
console.log(parsedArray);

除了使用正则表达式之外,还有其他方法可以将三元表达式解析成数组。以下是两种替代方法:字符遍历法

function parseTernaryExpression(expression) {
    let result = [];
    let current = '';

    for (let i = 0; i < expression.length; i++) {
        const char = expression[i];
        if (/[a-zA-Z0-9]/.test(char)) {
            current += char;
        } else {
            if (current !== '') {
                result.push(current);
                current = '';
            }
            result.push(char);
        }
    }

    if (current !== '') {
        result.push(current);
    }

    return result;
}

const expression = "件数>30?200:件数>25?100:75";
const parsedArray = parseTernaryExpression(expression);
console.log(parsedArray);

split() 和 reduce() 组合法

function parseTernaryExpression(expression) {
    const delimiters = ['>', '<', '?', ':'];
    const regex = new RegExp(`[${delimiters.join('\\')}]+`);

    return expression.split(regex).reduce((result, part, index) => {
        const delimiter = expression[part.length + index * (part.length + 1)];
        result.push(part, delimiter);
        return result;
    }, []).slice(0, -1);
}

const expression = "件数>30?200:件数>25?100:75";
const parsedArray = parseTernaryExpression(expression);
console.log(parsedArray);
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容