Add replace_regex function (#1393)
This commit is contained in:
parent
0a2c2692b3
commit
7d6483b995
@ -1145,6 +1145,7 @@ The executable is at: /bin/just
|
||||
|
||||
- `quote(s)` - Replace all single quotes with `'\''` and prepend and append single quotes to `s`. This is sufficient to escape special characters for many shells, including most Bourne shell descendants.
|
||||
- `replace(s, from, to)` - Replace all occurrences of `from` in `s` to `to`.
|
||||
- `replace_regex(s, regex, replacement)` - Replace all occurrences of `regec` in `s` to `replacement`.
|
||||
- `trim(s)` - Remove leading and trailing whitespace from `s`.
|
||||
- `trim_end(s)` - Remove trailing whitespace from `s`.
|
||||
- `trim_end_match(s, pat)` - Remove suffix of `s` matching `pat`.
|
||||
|
@ -43,6 +43,7 @@ lazy_static! {
|
||||
("path_exists", Unary(path_exists)),
|
||||
("quote", Unary(quote)),
|
||||
("replace", Ternary(replace)),
|
||||
("replace_regex", Ternary(replace_regex)),
|
||||
("sha256", Unary(sha256)),
|
||||
("sha256_file", Unary(sha256_file)),
|
||||
("shoutykebabcase", Unary(shoutykebabcase)),
|
||||
@ -283,6 +284,20 @@ fn replace(_context: &FunctionContext, s: &str, from: &str, to: &str) -> Result<
|
||||
Ok(s.replace(from, to))
|
||||
}
|
||||
|
||||
fn replace_regex(
|
||||
_context: &FunctionContext,
|
||||
s: &str,
|
||||
regex: &str,
|
||||
replacement: &str,
|
||||
) -> Result<String, String> {
|
||||
Ok(
|
||||
Regex::new(regex)
|
||||
.map_err(|err| err.to_string())?
|
||||
.replace_all(s, replacement)
|
||||
.to_string(),
|
||||
)
|
||||
}
|
||||
|
||||
fn sha256(_context: &FunctionContext, s: &str) -> Result<String, String> {
|
||||
use sha2::{Digest, Sha256};
|
||||
let mut hasher = Sha256::new();
|
||||
|
@ -373,6 +373,34 @@ test! {
|
||||
stderr: "echo foofoofoo\n",
|
||||
}
|
||||
|
||||
test! {
|
||||
name: replace_regex,
|
||||
justfile: "
|
||||
foo:
|
||||
echo {{ replace_regex('123bar123bar123bar', '\\d+bar', 'foo') }}
|
||||
",
|
||||
stdout: "foofoofoo\n",
|
||||
stderr: "echo foofoofoo\n",
|
||||
}
|
||||
|
||||
test! {
|
||||
name: invalid_replace_regex,
|
||||
justfile: "
|
||||
foo:
|
||||
echo {{ replace_regex('barbarbar', 'foo\\', 'foo') }}
|
||||
",
|
||||
stderr:
|
||||
"error: Call to function `replace_regex` failed: regex parse error:
|
||||
foo\\
|
||||
^
|
||||
error: incomplete escape sequence, reached end of pattern prematurely
|
||||
|
|
||||
2 | echo {{ replace_regex('barbarbar', 'foo\\', 'foo') }}
|
||||
| ^^^^^^^^^^^^^
|
||||
",
|
||||
status: EXIT_FAILURE,
|
||||
}
|
||||
|
||||
test! {
|
||||
name: capitalize,
|
||||
justfile: "
|
||||
|
Loading…
Reference in New Issue
Block a user