sS regexpReplace_directWithRefs(S s, S pat, S replacement) {
  Matcher m = regexp(pat, s);
  ret regexpReplace_direct(m, replacement);
}
  
sS regexpReplace_directWithRefs(Matcher m, S replacement) {
  new StringBuffer buf;
  while (m.find())
    m.appendReplacement(buf, replaceDollarVars2_dyn(replacement,
      v -> !isInteger(v) ? null : matcherGroup(m, parseInt(v))));
  m.appendTail(buf);
  ret str(buf);
}