John Resig's Micro-Templating in 140 bytes (138 actually).
Please see John's original article for template syntax and more examples.
with (data){ ... } implementation is longer, so the v variable must be used to access the supplied data like this: <%= v.foo || 'No foo' %>
@atk
\n allows double slash comment:
<% for (;;) { // loop description %>. So no real reason for an extra byte.Your code with recursive regex is extremely clever. Just wow.