如何判断一个表达式是否为三元表达式?

如何判断一个表达式是否为三元表达式

阅读 1.6k
3 个回答

image.png
^\s*(.*\?)(?!.*\?.*).*(\:|\?).*(\:.*)?\s*$

在 JavaScript 中,你可以使用类似的方法来检测简单的三元表达式。请注意,这个正则表达式也只能处理非常简单的三元表达式,并且可能无法处理更复杂的嵌套或包含括号的表达式。以下是一个示例:

 codefunction isTernaryExpression(expr) {
  // 只匹配简单的三元表达式,例如:x > y ? x : y
  const pattern = /^\s*\S+\s*\?\s*\S+\s*:\s*\S+\s*$/;
  return pattern.test(expr);
}

const expr1 = "x > y ? x : y";
const expr2 = "x + y";

console.log(isTernaryExpression(expr1)); // 输出:true
console.log(isTernaryExpression(expr2)); // 输出:false

要实现一个更复杂的三元表达式检测,可以使用 Acorn 这个库来解析 JavaScript 代码。首先,需要安装 Acorn:
npm install acorn
然后,我们可以使用以下代码来检测三元表达式:

codeconst acorn = require('acorn');

function isTernaryExpression(expr) {
  try {
    const parsed = acorn.parse(expr);
    const expressionStatement = parsed.body[0];
    return expressionStatement.type === 'ExpressionStatement' &&
           expressionStatement.expression.type === 'ConditionalExpression';
  } catch (error) {
    // 如果解析出错,说明这不是一个有效的表达式
    return false;
  }
}

const expr1 = "x > y ? x : y";
const expr2 = "x + y";
const expr3 = "a ? b ? c : d : e";

console.log(isTernaryExpression(expr1)); // 输出:true
console.log(isTernaryExpression(expr2)); // 输出:false
console.log(isTernaryExpression(expr3)); // 输出:true

通过使用 Acorn 库,可以更准确地检测三元表达式,即使它们嵌套或包含括号等复杂结构。

有两种办法:用正则表达式来匹配这种形式,或者使用语法分析器来解析表达式的结构。
这是正则表达式:
/^(.+)\?(.+):(.+)$/

语法分析器是使用acorn这个JavaScript解析器库,下面是代码:

let acorn = require("acorn");
let expression = "a > b ? 'a is greater' : 'b is greater'";
let ast = acorn.parse(expression);
let ternary = ast.body[0].expression;
if (ternary.type === "ConditionalExpression") {
  console.log("This is a ternary expression.");
  console.log("Condition: " + ternary.test);
  console.log("True value: " + ternary.consequent);
  console.log("False value: " + ternary.alternate);
} else {
  console.log("This is not a ternary expression.");
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题