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)), } }