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');
}

see also