From c0d9b53004ddfe539bfe76a60b48ce0d05c9c72c Mon Sep 17 00:00:00 2001 From: elkowar <5300871+elkowar@users.noreply.github.com> Date: Fri, 14 May 2021 11:55:08 +0200 Subject: [PATCH] Add regex replace and function call docs --- docs/content/main/expression_language.md | 3 +++ src/value/attr_value/attr_value_expr.rs | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/docs/content/main/expression_language.md b/docs/content/main/expression_language.md index 53b3dd0..cabd73b 100644 --- a/docs/content/main/expression_language.md +++ b/docs/content/main/expression_language.md @@ -34,4 +34,7 @@ The expression language supports: - strings can contain other expressions again: `'foo {{some_variable}} bar'` - json access (`object.field`, `array[12]`, `object["field"]`) - for this, the object/array value needs to refer to a variable that contains a valid json string. +- some function calls: + - `round(number, decimal_digits)`: Round a number to the given amount of decimals + - `replace(string, regex, replacement)`: Replace matches of a given regex in a string diff --git a/src/value/attr_value/attr_value_expr.rs b/src/value/attr_value/attr_value_expr.rs index 90320dd..169d522 100644 --- a/src/value/attr_value/attr_value_expr.rs +++ b/src/value/attr_value/attr_value_expr.rs @@ -230,6 +230,15 @@ fn call_expr_function(name: &str, args: Vec) -> Result { } _ => Err(anyhow!("Incorrect number of arguments given to {}", name)), }, + "replace" => match args.as_slice() { + [string, pattern, replacement] => { + let string = string.as_string()?; + let pattern = regex::Regex::new(&pattern.as_string()?)?; + let replacement = replacement.as_string()?; + Ok(PrimVal::from(pattern.replace_all(&string, replacement.replace("$", "$$").replace("\\", "$")).into_owned())) + } + _ => Err(anyhow!("Incorrect number of arguments given to {}", name)), + }, _ => Err(anyhow!("Unknown function {}", name)), } }