You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EJS模板代码转Dot引擎语法求助:JS函数与正则适配问题

解决Dot引擎中替代EJS表达式的方案

我来帮你搞定Dot引擎里的这些语法问题!Dot和EJS在模板表达式的处理逻辑上确实存在一些差异,下面针对你遇到的三个场景逐一给出可行的替代方案:

1. 获取日期年份(替代getFullYear())

如果在Dot中直接调用blog.created_at.getFullYear()无效,大概率是因为created_at不是一个原生Date对象(比如后端传递的是字符串格式的日期)。你可以通过两种方式解决:

  • 方案一:后端预处理推荐
    在渲染模板前,在后端代码中提前计算好年份并挂载到blog对象上:

    // 后端示例Node.js代码
    blog.year = new Date(blog.created_at).getFullYear();
    

    然后模板里直接使用:

    {%= blog.year %}
    
  • 方案二:模板内转换
    如果必须在模板中处理,先将日期字符串转为Date实例再调用方法:

    {%= new Date(blog.created_at).getFullYear() %}
    

2. 正则替换空格(替代replace(new RegExp(" ", "g"), "-"))

Dot支持直接使用正则字面量,相比new RegExp写法更简洁且不易出错,直接替换成:

{%= blog.short_name.replace(/ /g, "-") %}

如果因为特殊场景必须使用构造函数,注意转义模板中的双引号:

{%= blog.short_name.replace(new RegExp(" ", "g"), "-") %}

不过更推荐正则字面量的写法,符合JavaScript常规用法。

3. 匹配图片src属性(替代match(...))

Dot中match方法的逻辑和JS一致,但要注意匹配失败会返回null,直接取[1]会导致模板渲染崩溃。所以需要添加兜底逻辑:

{%= (blog.content.match(/<img[^>]+src="([^">]+)/) || [])[1] || '' %}

解释一下:

  • (匹配结果 || []):如果匹配失败返回null,就用空数组兜底避免报错
  • [1] || '':如果数组没有索引1的元素(比如匹配到但分组为空),就用空字符串替代

另外,如果你的blog.content是未转义的原始HTML(不是&lt;这种转义后的),需要把正则里的&lt;改成<,&gt;改成>。

额外建议

Dot引擎更推荐尽量在后端预处理数据,减少模板中的复杂逻辑——这样不仅能避免跨模板引擎的语法差异问题,还能让模板结构更清晰,更容易维护。

内容的提问来源于stack exchange,提问作者MikZuit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:54:56