我正在使用Lee Munroe的grunt-email-workflow为没有模板引擎的PHP框架构建一组电子邮件模板,即:它使用原始php变量<?= $firstname; ?>
等,在模板中。
一切顺利,直到我尝试在电子邮件源中实现这些变量,然后我发现assemble
会在遇到变量时发生错误并引发错误。
此项目的gruntfile
已包含grunt-replace
,因此我的想法是对handlebars
## item ##
之类的{{ item }}
解析的文字进行替换,把它变成大括号replacement
,然后我可以在PHP应用程序上使用Twig来解析PHP。
我的问题是我无法解析grunt-replace
的{{1}}部分。
我发现this article做了类似于我想要的事情,但替换功能不会为此工作。
到目前为止,我有这个:
replace: {
dist: {
options: {
usePrefix: false,
patterns: [
{
match: /\##[^##]*\##/g,
replacement: ???????
}
]
},
files: {
expand: true,
flatten: true,
src: ['<%= paths.dist %>/**/*.html'],
dest: '<%= paths.dist %>/'
},
}
}
更新
经过一些额外的尝试后,我有了这个:
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 :(得分:1)
您只需要在捕获值所需的模式周围使用捕获组(圆括号,圆括号),以及一个与##到最接近的##的任意数量的符号匹配的构造:
要么使用惰性构造:
match: /##([^#]*(?:#(?!#)[^#]*)*)##/g
或者使用它的展开版本:
match: /##([\s\S]*?)##/g