Expr Evaluation Tool Guide
May 1, 2025 ยท View on GitHub
The eval tool allows you to evaluate expressions using the powerful expr language. This guide demonstrates various examples to showcase its capabilities.
Basic Operations
Arithmetic Operations
eval("10 + 5") // Result: 15
eval("10 - 5") // Result: 5
eval("10 * 5") // Result: 50
eval("10 / 5") // Result: 2
eval("10 % 3") // Result: 1
eval("2 ^ 3") // Result: 8 (exponentiation)
String Operations
eval("'Hello' + ' ' + 'World'") // Result: "Hello World"
eval("len('Hello')") // Result: 5
Boolean Operations
eval("true and false") // Result: false
eval("true or false") // Result: true
eval("!true") // Result: false
eval("10 > 5") // Result: true
eval("10 == 10") // Result: true
eval("'a' in ['a', 'b', 'c']") // Result: true
Working with Arrays
Array Creation and Access
eval("[1, 2, 3, 4, 5]") // Result: [1, 2, 3, 4, 5]
eval("[1, 2, 3][1]") // Result: 2 (zero-based indexing)
Array Functions
eval("len([1, 2, 3, 4, 5])") // Result: 5
eval("map([1, 2, 3], # * 2)") // Result: [2, 4, 6]
eval("filter([1, 2, 3, 4], # > 2)") // Result: [3, 4]
eval("all([1, 2, 3], # > 0)") // Result: true
eval("any([1, 2, 3], # > 2)") // Result: true
eval("sum([1, 2, 3, 4])") // Result: 10
Sorting Arrays
eval("sort([3, 1, 4, 2])") // Result: [1, 2, 3, 4]
Working with Maps/Objects
Map Creation and Access
eval("{a: 1, b: 2, c: 3}") // Result: {"a": 1, "b": 2, "c": 3}
eval("{a: 1, b: 2}.a") // Result: 1
Complex Examples
Filtering and Transforming Data
users = [{"Name": "John", "Age": 30}, {"Name": "Ivan", "Age": 51}, {"Name": "Eve", "Age": 15}]
eval("filter(users, .Age >= 18)")
// Result: [{"Name": "John", "Age": 30}, {"Name": "Ivan", "Age": 51}]
eval("map(users, {name: .Name, isAdult: .Age >= 18})")
// Result: [{"name": "John", "isAdult": true}, {"name": "Ivan", "isAdult": true}, {"name": "Eve", "isAdult": false}]
Sorting Complex Data
users = [{"Name": "John", "Age": 30}, {"Name": "Ivan", "Age": 51}, {"Name": "Eve", "Age": 15}]
eval("sortBy(users, .Age, 'desc')")
// Result: [{"Name": "Ivan", "Age": 51}, {"Name": "John", "Age": 30}, {"Name": "Eve", "Age": 15}]
eval("sortBy(users, .Name)")
// Result: [{"Name": "Eve", "Age": 15}, {"Name": "Ivan", "Age": 51}, {"Name": "John", "Age": 30}]
Aggregation Functions
products = [{"Name": "Apple", "Price": 0.5, "Quantity": 10}, {"Name": "Banana", "Price": 0.3, "Quantity": 15}, {"Name": "Orange", "Price": 0.6, "Quantity": 8}]
eval("sum(map(products, .Price * .Quantity))")
// Result: 13.3 (total value of inventory)
eval("reduce(products, 0, acc + .Price * .Quantity)")
// Result: 13.3 (same calculation using reduce)
Conditional Logic
users = [{"Name": "John", "Age": 30}, {"Name": "Ivan", "Age": 51}, {"Name": "Eve", "Age": 15}]
eval("map(users, {name: .Name, status: .Age < 18 ? 'minor' : (.Age >= 65 ? 'senior' : 'adult')})")
// Result: [{"name": "John", "status": "adult"}, {"name": "Ivan", "status": "adult"}, {"name": "Eve", "status": "minor"}]
String Manipulation
eval("upper('hello')") // Result: "HELLO"
eval("lower('HELLO')") // Result: "hello"
eval("trim(' hello ')") // Result: "hello"
eval("split('a,b,c', ',')") // Result: ["a", "b", "c"]
Date Functions
eval("now()") // Result: current timestamp
eval("now().Year") // Result: current year
eval("now().Format('2006-01-02')") // Result: current date formatted as YYYY-MM-DD
Advanced Features
Function Composition
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
eval("sum(filter(numbers, # % 2 == 0))")
// Result: 30 (sum of even numbers)
Custom Environment Variables
You can provide custom variables in the environment:
// With env: {"x": 10, "y": 20}
eval("x + y") // Result: 30
Regular Expressions
eval("match('hello world', 'hello')") // Result: true
eval("replace('hello world', 'hello', 'hi')") // Result: "hi world"
Tips for Using the Eval Tool
- Use single quotes for strings within the expression
- Use dot notation to access object properties
- Use
#as a placeholder in map/filter functions - Remember that array indexing is zero-based
- For complex expressions, break them down into smaller parts
This guide covers many of the powerful features of the expr language. For more details and advanced usage, refer to the official documentation.