function Expression(expression, defines) {
  //>>includeStart('debug', pragmas.debug);
  Check.typeOf.string("expression", expression);
  //>>includeEnd('debug');

  this._expression = expression;
  expression = replaceDefines(expression, defines);
  expression = replaceVariables(removeBackslashes(expression));

  // customize jsep operators
  jsep.addBinaryOp("=~", 0);
  jsep.addBinaryOp("!~", 0);

  let ast;
  try {
    ast = jsep(expression);
  } catch (e) {
    throw new RuntimeError(e);
  }

  this._runtimeAst = createRuntimeAst(this, ast);
}
An expression for a style applied to a {@link Cesium3DTileset}.
<p>
Evaluates an expression defined using the
{@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/Styling|3D Tiles Styling language}.
</p>
<p>
Implements the {@link StyleExpression} interface.
</p>

@alias Expression
@constructor

@param {string} [expression] The expression defined using the 3D Tiles Styling language.
@param {object} [defines] Defines in the style.

@example
const expression = new Cesium.Expression('(regExp("^Chest").test(${County})) && (${YearBuilt} >= 1970)');
expression.evaluate(feature); // returns true or false depending on the feature's properties

@example
const expression = new Cesium.Expression('(${Temperature} > 90) ? color("red") : color("white")');
expression.evaluateColor(feature, result); // returns a Cesium.Color object