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

如何在EJS模板中解析JSON数据中的自定义{it}标记为斜体样式

如何在EJS模板中解析JSON数据中的自定义{it}标记为斜体样式

嘿,别担心,这个问题其实挺常见的,新手遇到这种自定义标记转义的问题很正常,我来一步步帮你搞定!

首先你得知道,你现在用的<%= example %>会让EJS自动把HTML标签转义成实体字符(比如把<i>变成&lt;i&gt;),所以就算你把{it}换成<i>,也只会显示成文字而不是真正的斜体。解决这个问题分两步:把自定义标记替换成HTML斜体元素,然后让EJS不转义输出这些HTML。

方法一:在EJS模板里直接处理(最快实现)

你可以在模板里写一个简单的小函数,专门用来替换{it}和{/it}标记:

<% 
// 定义解析斜体标记的函数
function parseItalics(text) {
  // 用正则表达式把所有{it}...{/it}替换成<i>标签
  return text.replace(/{it}(.*?){/it}/g, '<i>$1</i>');
}
%>

<% if(sense[0][1].dt[1]){ 
const example = sense[0][1].dt[1][1][0].t; %>
<div class="col-12 sense-example-wrapper">
<!-- 用<%- %>输出不转义的HTML,这样<i>标签才会生效 -->
<p class="sense-example"><%- parseItalics(example) %></p>
</div>
<% } %>

这里的正则/{it}(.*?){/it}/g用了非贪婪匹配(.*?),就算你的文本里有多个{it}标记(比如"{it}狗{/it}和{it}猫{/it}"),也能精准匹配每一段需要斜体的内容,不会出错。

方法二:用CSS类替换(更灵活的样式控制)

如果你想以后方便修改斜体的样式(比如加颜色、下划线),可以把<i>换成自定义CSS类:

<% 
function parseItalics(text) {
  return text.replace(/{it}(.*?){/it}/g, '<span class="custom-italic">$1</span>');
}
%>

然后在你的CSS文件里添加样式:

.custom-italic {
  font-style: italic;
  /* 还可以加其他样式,比如:
  color: #ff4444;
  text-decoration: underline;
  */
}

这样以后要改样式,直接动CSS就行,不用碰模板代码。

方法三:后端预处理(适合大量数据的情况)

如果你的API返回很多带{it}标记的数据,也可以在后端(比如Node.js代码里)先把所有数据处理好,再传给EJS模板:

// 假设你已经从API拿到了data数组
data.forEach(item => {
  // 提前替换所有{it}标记
  item.t = item.t.replace(/{it}(.*?){/it}/g, '<i>$1</i>');
});
// 把处理好的data传给EJS模板
res.render('你的模板名', { sense: data });

然后模板里直接用<%- example %>输出就行,不用在模板里写函数了。

最后提醒一句:用<%- %>输出未转义的HTML时,要确保你的API数据是安全的(比如是你自己控制的数据源),避免XSS攻击。如果数据来自用户提交,最好先做一下HTML sanitize处理哦~

备注:内容来源于stack exchange,提问作者Juan Manuel Linares

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 10:03:05