diff options
author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2021-09-05 22:59:46 -0400 |
---|---|---|
committer | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2021-09-11 16:05:39 -0400 |
commit | b52f244cb26718487053835e4b9a026a32c40412 (patch) | |
tree | 2bb29fe0e962776c8527562ddedab8d83023ee50 /ext | |
parent | 39a704e2afb3e0103824d9e202de91a43853c374 (diff) |
Anki template regex helper updates (#1934)
* Update regexReplace and regexMatch to support content arguments
* Update documentation
Diffstat (limited to 'ext')
-rw-r--r-- | ext/js/templates/sandbox/anki-template-renderer.js | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/ext/js/templates/sandbox/anki-template-renderer.js b/ext/js/templates/sandbox/anki-template-renderer.js index 8a257bcc..fab0ed3f 100644 --- a/ext/js/templates/sandbox/anki-template-renderer.js +++ b/ext/js/templates/sandbox/anki-template-renderer.js @@ -206,15 +206,20 @@ class AnkiTemplateRenderer { _regexReplace(context, ...args) { // Usage: - // {{#regexReplace regex string [flags]}}content{{/regexReplace}} + // {{#regexReplace regex string [flags] [content]...}}content{{/regexReplace}} // regex: regular expression string // string: string to replace // flags: optional flags for regular expression // e.g. "i" for case-insensitive, "g" for replace all - let value = args[args.length - 1].fn(context); - if (args.length >= 3) { + const argCount = args.length - 1; + const options = args[argCount]; + let value = options.fn(context); + if (argCount > 3) { + value = `${args.slice(3).join('')}${value}`; + } + if (argCount > 1) { try { - const flags = args.length > 3 ? args[2] : 'g'; + const flags = argCount > 2 ? args[2] : 'g'; const regex = new RegExp(args[0], flags); value = value.replace(regex, args[1]); } catch (e) { @@ -226,14 +231,19 @@ class AnkiTemplateRenderer { _regexMatch(context, ...args) { // Usage: - // {{#regexMatch regex [flags]}}content{{/regexMatch}} + // {{#regexMatch regex [flags] [content]...}}content{{/regexMatch}} // regex: regular expression string // flags: optional flags for regular expression // e.g. "i" for case-insensitive, "g" for match all - let value = args[args.length - 1].fn(context); - if (args.length >= 2) { + const argCount = args.length - 1; + const options = args[argCount]; + let value = options.fn(context); + if (argCount > 2) { + value = `${args.slice(2).join('')}${value}`; + } + if (argCount > 0) { try { - const flags = args.length > 2 ? args[1] : ''; + const flags = argCount > 1 ? args[1] : ''; const regex = new RegExp(args[0], flags); const parts = []; value.replace(regex, (g0) => parts.push(g0)); |