2015-12-12 2 views
2

Я использую Lee Munro's grunt-email-workflow для создания набора шаблонов электронной почты для фреймворка PHP, который не имеет механизма шаблона, то есть: он использует необработанные php-переменные <?= $firstname; ?> и т. Д., В шаблоны.Grunt-Replace для скомпилированных шаблонов электронной почты

Все шло хорошо, пока я не попытался реализовать эти переменные в источниках электронной почты, тогда я узнал, что assemble дросселирует и выдает ошибки в любое время, когда сталкивается с переменной.

gruntfile для этого проекта уже grunt-replace так что моя мысль была сделать заменить на текст, который не будет разобрано handlebars как ## item ## и превратить его в фигурные скобки {{ item }}, то я могу использовать Twig на PHP приложение для разбора PHP.

Моя проблема Я не могу разрешить replacement часть grunt-replace.

Я нашел this article, который делает что-то похожее на то, что я хочу, но эта функция замены не будет работать для этого.

До сих пор у меня есть это:

replace: { 
    dist: { 
     options: { 
      usePrefix: false, 
      patterns: [ 
       { 
        match: /\##[^##]*\##/g, 
        replacement: ??????? 
       } 
      ] 
     }, 
     files: { 
      expand: true, 
      flatten: true, 
      src: ['<%= paths.dist %>/**/*.html'], 
      dest: '<%= paths.dist %>/' 
     }, 
    } 
} 

UPDATE:

После некоторых дополнительных попыток я это:

replace: { 
    dist: { 
     options: { 
      usePrefix: false, 
      patterns: [ 
       { 
        match: /\##[^##]*\##/g, 
        replacement: '{{ $1 }}' 
       } 
      ] 
     }, 
     files: [ 
      { 
       expand: true, 
       flatten: true, 
       src: ['<%= paths.dist %>/front/*.html'], 
       dest: '<%= paths.dist %>/front/' 
      }, 
      { 
       expand: true, 
       flatten: true, 
       src: ['<%= paths.dist %>/back/*.html'], 
       dest: '<%= paths.dist %>/back/' 
      } 
     ] 
    } 
} 

В моих скомпилированных шаблонов ## firstname ## теперь заменен {{ $1 }}

Как получить значение содержимого в совпадающих тегах для замены?

+0

Try 'матч:/## ([^ #] * (?: # (?! #) [^ #] *) *) ##/g' или '/ ## ([\ s \ S] *?) ##/g'. –

+0

Это трюк, спасибо! –

ответ

1

Вам просто нужно использовать группу захвата (круглые скобки, круглые скобки) вокруг шаблона, который требуется для захвата значения, и конструкцию, которая будет соответствовать любому количеству символов от ## до ближайшего ##:

Либо использовать ленивую конструкцию:

match: /##([^#]*(?:#(?!#)[^#]*)*)##/g 

Или использовать развернутую версию этого:

match: /##([\s\S]*?)##/g 
Смежные вопросы