Интересно, в парсере шаблонов Underscore есть какая-то ошибка?Если вы используете синтаксис объекта RegExp вместо литерального синтаксиса regex:
<script id="template1" type="text/html">
<%= message.replace(new RegExp('\r?\n', 'g'), '<br />') %>
</script>
, тогда вы начнете получать ожидаемые результаты: http://jsfiddle.net/ambiguous/GHtDY/6/
Ваш пример "фанки выходных данных":
<%= 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>
работает должным образом.