字符串包含使用replace后的替换值(Regex.lastMatch)

时间:2018-01-26 14:54:00

标签: javascript node.js regex replace gulp

我使用gulp从tempaltes生成HTML页面。

模板如下所示:

...
<script type="application/javascript">
{placeholder}
</script>
...

我正在尝试用一些缩小的JS代码替换占位符。

我的gulp构建使用如下所示的方法:

function renderTemplate(minifiedJS) {
  var template = fs.readFileSync('template.html', 'utf-8');
  return template.replace('{placeholder}', minifiedJS); // this is ok because the {placeholder} appears only once.
}

然而,结果看起来像这样:

...
<script type="application/javascript">
 MINIFIED JS CODE{placeholder}SOME MORE MINIFIED JS CODE
</script>
...

替换如何工作,{占位符}仍然出现在中间中?

1 个答案:

答案 0 :(得分:1)

经过数小时的调试,我发现缩小的代码包含字符&#34; $&amp;&#34;。

此组合触发了名为RegExp.lastMatch的正则表达式功能。

它用缩小的JS代码替换了{placeholder},然后它替换了&#34; $&amp;&#34;值为&#34; {placeholder}&#34;。

是的。

我最终将实现更改为

function renderTemplate(minifiedJS) {
  var template = fs.readFileSync('template.html', 'utf-8');
  var splitTemplate = template.split('{placeholder}'); 
  return splitTemplate[0] + minifiedJS + splitTemplate[1]; // this is ok because the placeholder appears exactly once.
}