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' %>
I have used recursive regex many times before - if you can utilize the callback's arguments, go for it.