demo · v136
Template Tag Helpers
Use RegExp.escape behind tagged template literals: re\`…\` escapes interpolations but lets literal parts of the template through as regex syntax. Two real-world tags — re for building regex from user input, and likePattern for SQL-LIKE matching against logs — both editable, both running live.
probing…
re-tag: interpolated values are escaped
likePattern: SQL-style wildcards survive, the rest is escaped
the tags
function re(strings, ...values) {
const safe = values.map(v => RegExp.escape(String(v)));
let pat = strings[0];
for (let i = 0; i < values.length; i++) pat += safe[i] + strings[i + 1];
return new RegExp(pat, 'g');
}
function likePattern(strings, ...values) {
// Build a single string, then SQL-LIKE → regex, escaping every literal byte.
let raw = strings[0];
for (let i = 0; i < values.length; i++) raw += String(values[i]) + strings[i + 1];
let pat = '';
for (const ch of raw) {
if (ch === '%') pat += '.*';
else if (ch === '_') pat += '.';
else pat += RegExp.escape(ch);
}
return new RegExp('^' + pat + '$', 'gm');
}