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

如何实现仅对列表标记(如1.、A.、i.等)与冒号间的文本添加粗体

如何实现仅对列表标记(如1.、A.、i.等)与冒号间的文本添加粗体

我完全懂你的需求啦——就是只想给行首的列表标记(比如1.、A.、i.这类)后面到冒号的文本加粗,绝对不能误伤句子中间出现的. ... :结构对吧?你当前的代码之所以会出现误匹配,核心问题在于正则没有限定匹配的位置,导致任何地方符合. ... :格式的内容都会被加粗。

咱们来调整一下正则和代码,完美解决这个问题:

修正后的代码

<script>
  window.onload = function() {
    const contentEl = document.getElementById("content");
    let text = contentEl.innerHTML;
    
    // 修正后的正则:限定匹配行首(含可能的缩进空格)的列表标记
    // 匹配三种类型的列表标记:数字点/大写字母点/小写罗马数字点
    const pattern = /(^|\s)(\d+\.|[A-Z]\.|[ivxlcdm]+\.)\s*([^:]+?)\s*(?=:)/gmi;
    
    text = text.replace(pattern, function(match, leadingSpace, marker, textToBold) {
      // 保留前置空格,把标记和目标文本一起加粗
      return `${leadingSpace}<b>${marker.trim()} ${textToBold.trim()}</b>:`;
    });
    
    contentEl.innerHTML = text;
  };
</script>

代码说明

  • 正则的关键改进:
    • (^|\s):确保匹配的是行首或者空格之后的位置(兼容有缩进的列表项)
    • (\d+\.|[A-Z]\.|[ivxlcdm]+\.):精准匹配三种常见列表标记:数字加小数点、大写字母加小数点、小写罗马数字加小数点
    • \s*([^:]+?)\s*:非贪婪匹配标记后到冒号前的文本,自动忽略前后多余空格
    • (?=:):正向预查冒号,确保只匹配冒号前的内容
    • gmi:全局匹配、多行模式(让^匹配每一行的开头)、不区分大小写(兼容罗马数字的大小写写法)
  • 替换逻辑优化:把标记和需要加粗的文本合并到一个<b>标签里,避免重复嵌套,同时保留列表项的缩进空格,保证排版不变。

这样修改后,只会对行首的列表标记到冒号之间的文本加粗,再也不会误伤句子中间的类似结构啦!

备注:内容来源于stack exchange,提问作者Nuel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 17:29:35