Add support for some regex functions in handlebars templates
This commit is contained in:
parent
4d7940e8e4
commit
b59a5b8cdb
@ -79,6 +79,47 @@ function handlebarsSanitizeCssClass(options) {
|
|||||||
return options.fn(this).replace(/[^_a-z0-9\u00a0-\uffff]/ig, '_');
|
return options.fn(this).replace(/[^_a-z0-9\u00a0-\uffff]/ig, '_');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function handlebarsRegexReplace(...args) {
|
||||||
|
// Usage:
|
||||||
|
// {{#regexReplace regex string [flags]}}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(this);
|
||||||
|
if (args.length >= 3) {
|
||||||
|
try {
|
||||||
|
let flags = args.length > 3 ? args[2] : 'g';
|
||||||
|
const regex = new RegExp(args[0], flags);
|
||||||
|
value = value.replace(regex, args[1]);
|
||||||
|
} catch (e) {
|
||||||
|
return `${e}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
function handlebarsRegexMatch(...args) {
|
||||||
|
// Usage:
|
||||||
|
// {{#regexMatch regex [flags]}}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(this);
|
||||||
|
if (args.length >= 2) {
|
||||||
|
try {
|
||||||
|
const flags = args.length > 2 ? args[1] : '';
|
||||||
|
const regex = new RegExp(args[0], flags);
|
||||||
|
const parts = [];
|
||||||
|
value.replace(regex, (g0) => parts.push(g0));
|
||||||
|
value = parts.join('');
|
||||||
|
} catch (e) {
|
||||||
|
return `${e}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
function handlebarsRegisterHelpers() {
|
function handlebarsRegisterHelpers() {
|
||||||
if (Handlebars.partials !== Handlebars.templates) {
|
if (Handlebars.partials !== Handlebars.templates) {
|
||||||
Handlebars.partials = Handlebars.templates;
|
Handlebars.partials = Handlebars.templates;
|
||||||
@ -88,6 +129,8 @@ function handlebarsRegisterHelpers() {
|
|||||||
Handlebars.registerHelper('kanjiLinks', handlebarsKanjiLinks);
|
Handlebars.registerHelper('kanjiLinks', handlebarsKanjiLinks);
|
||||||
Handlebars.registerHelper('multiLine', handlebarsMultiLine);
|
Handlebars.registerHelper('multiLine', handlebarsMultiLine);
|
||||||
Handlebars.registerHelper('sanitizeCssClass', handlebarsSanitizeCssClass);
|
Handlebars.registerHelper('sanitizeCssClass', handlebarsSanitizeCssClass);
|
||||||
|
Handlebars.registerHelper('regexReplace', handlebarsRegexReplace);
|
||||||
|
Handlebars.registerHelper('regexMatch', handlebarsRegexMatch);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user