Menu Icon

Advanced JEXL

This article mentions details of JEXL.

Unary Operators


OperationSymbol
Negate!

Example

Below code means false by negate operation.

    {{!true}}

Binary Operators


OperationSymbol
Add, Concat+
Subtract-
Multiply*
Divide/
Divide and floor//
Modulus%
Power of^
Logical AND&&
Logical OR||

Comparisons


ComparisonSymbol
Equal==
Not equal!=
Greater than>
Greater than or equal>=
Less than<
Less than or equal<=
Element in array or stringin

A note about in

The in operator can be used to check for a substring: "Cad" in "Ron Cadillac", and it can be used to check for an array element: "coarse" in ['fine', 'medium', 'coarse']. However, the == operator is used behind-the-scenes to search arrays, so it should not be used with arrays of objects. The following expression returns false: {a: 'b'} in [{a: 'b'}].

Ternary operator

Conditional expressions check to see if the first segment evaluates to a truthy value. If so, the consequent segment is evaluated. Otherwise, the alternate is. If the consequent section is missing, the test result itself will be used instead.


ExpressionResult
"" ? "Full" : "Empty"Empty
"foo" in "foobar" ? "Yes" : "No"Yes
{agent: "Archer"}.agent ?: "Kane"Archer

Native Types


TypeExamples
Booleanstrue, false
Strings"Hello "user"", 'Hey there!'
Numerics6, -7.2, 5, -3.14159
Objects{hello: "world!"}
Arrays['hello', 'world!']

Groups


Parentheses work just how you'd expect them to:

ExpressionResult
(83 + 1) / 242
1 < 3 && (4 > 2 || 2 > 4)true

Identifiers

Access variables in the context object by just typing their name. Objects can be traversed with dot notation, or by using brackets to traverse to a dynamic property name.

Example context:

{
  name: {
    first: "Malory",
    last: "Archer"
  },
  exes: [
    "Nikolai Jakov",
    "Len Trexler",
    "Burt Reynolds"
  ],
  lastEx: 2
}

ExpressionResult
name.firstMalory
name['la' + 'st']Archer
exes[2]Burt Reynolds
exes[lastEx - 1]Len Trexler

Functions

In JEXL, common built-in functions are provided, but also functions library is extended with lodash functions.

You can use lodash functions from this link.

Also you can check our functions from this article.

Example

Check JEXL codes below

Find Min

    {{ min([65, 42, 87, 88]) }}

    // => 42

Reverse Array

    {{ reverse([1, 2, 3, 4]) }}

    // => [4, 3, 2, 1]

Check Equal

    {{ eq({ a:1 }, { a:1 }) }}
    // => true

    {{ eq(3, 4) }}
    // => false

Add Elements To Array

    {{ concat([1], 2, 3, 4) }}

    // => [1, 2, 3, 4]

Get Last Element of Array

    {{ reverse([1, 2, 3]) }}

    // => 3