Ответ 1
Интересно, есть ли у парсера шаблонов Underscore какая-то ошибка. Если вместо синтаксиса регулярного выражения используется синтаксис объекта RegExp:
<script id="template1" type="text/html">
<%= message.replace(new RegExp('\r?\n', 'g'), '<br />') %>
</script>
тогда вы начинаете получать ожидаемые результаты: http://jsfiddle.net/ambiguous/GHtDY/6/
Пример "funky output":
<%= message.replace(/[\r\n?]/g, '<br /><br />') %>
выходит фанки, потому что Underscore заменяет n вашими элементами <br>
. В любом случае, этот класс символов должен соответствовать любому одному CR, LF или вопросительному знаку, и это не то, что вы пытаетесь сделать в любом случае.
Я подозреваю, что у парсера шаблонов Underscore есть некоторые проблемы с некоторыми регулярными выражениями; вы заметите, что /\s/g
не работает так, как ожидалось. В частности, кажется, что некоторые проблемы анализируют escape-последовательности, такие как \r
и \s
внутри литерала регулярного выражения. Например, это:
<script id="template1" type="text/html">
<%= message.replace(/\d/g, '<br /><br />') %>
</script>
работает не так, как ожидалось, когда message
содержит некоторые цифры, но используя new RegExp
<script id="template1" type="text/html">
<%= message.replace(new RegExp('\d', 'g'), '<br /><br />') %>
</script>
работает как ожидалось.