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

如何在markdown-it中自定义规则将\\包裹文本解析为斜体

实现方案

你可以通过给markdown-it添加自定义内联解析规则实现需求,不需要修改原有解析逻辑和HTML模板,仅需在初始化md实例后新增自定义规则即可。


完整修改后的JS代码

const MarkdownIt = require('markdown-it')
const md = new MarkdownIt({
    html: true,
    linkify: true,
    typographer: true
});

// 新增:自定义双反斜杠斜体规则
md.inline.ruler.before('emphasis', 'custom_backslash_italic', (state, silent) => {
  const start = state.pos;
  // 匹配开头的两个反斜杠
  if (state.src.slice(start, start + 2) !== '\\\\') return false;
  // 查找结尾的两个反斜杠
  const end = state.src.indexOf('\\\\', start + 2);
  if (end === -1) return false;

  if (!silent) {
    // 生成斜体em标签的token
    state.push('em_open', 'em', 1).markup = '\\\\';
    state.push('text', '', 0).content = state.src.slice(start + 2, end);
    state.push('em_close', 'em', -1).markup = '\\\\';
  }
  // 移动解析指针到结束位置
  state.pos = end + 2;
  return true;
});

export default {
    methods: {
        marked(payload: string): string {
            if (payload) return this.parse(md.render(payload));
            return "";
        },
        parse(payload: string, type: any = "") {
            const parser = new DOMParser();
            const htmlDoc = parser.parseFromString(payload, "text/html");
            const links = htmlDoc.querySelectorAll("a");
            links.forEach(link => {
                link.setAttribute("target", "_blank");
                link.classList.add(
                    "hover:underline",
                    "hover:text-orange",
                    "text-indigo-200"
                );
            });
            if (type === "commentTask") {
                const divs = htmlDoc.querySelectorAll(
                    ".phabricator-remarkup-embed-layout-link"
                );
                divs.forEach(div => {
                    const url = div.attributes.item(0)?.value;
                    div.classList.add("border", "border-red-300", "p-2", "w-72", "mt-2");
                    const spans = div.querySelectorAll(
                        ".phabricator-remarkup-embed-layout-name"
                    );
                    spans.forEach(span => {
                        const newA = htmlDoc.createElement("a");
                        newA.classList.add("hover:text-orange", "mr-1", "pr-1");
                        newA.innerHTML = span.innerHTML;
                        newA.setAttribute("href", url as string);
                        newA.setAttribute("target", "_blank");
                        span.innerHTML = "";
                        span.appendChild(newA);
                    });
                    const as = div.querySelectorAll(
                        ".phabricator-remarkup-embed-layout-download"
                    );
                    as.forEach(a => {
                        a.classList.add("ml-2");
                        a.removeAttribute("target");
                    });
                });
            }
            return htmlDoc.documentElement.innerHTML;
        }
    }
};

效果说明

修改后原有*斜体文本*语法不受影响,新的\\自定义斜体\\格式会被自动解析为<em>自定义斜体</em>,默认渲染为斜体样式,你也可以自行给em标签添加自定义CSS样式调整效果。

内容的提问来源于stack exchange,提问作者Anjasmara Dwi.S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:39:03