如何将三元表达式解析成数组?
件数>30?200:件数>25?100:75期望结果: ['件数','>','30','?','200',':','件数','>','25','?','100',':','75']
回复
1个回答
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);
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容