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

为未包裹在[area]标签中的单词添加BBcode的正则解决方案

解决方案:忽略已有[area]标签的单词包裹正则方案

核心思路

通过正则优先匹配并保留已存在的[area=xxx]xxx[/area]标签块,仅对标签外的带重音符号单词统一添加[area=单词]单词[/area]格式,避免对标签内部或属性中的单词重复包裹。

正则实现(JavaScript)

利用分支匹配逻辑,先捕获完整的[area]标签并直接返回原内容,再对标签外的单词进行替换:

function wrapUnwrappedWords(str) {
  return str.replace(
    /(?:\[area=([^\]]+)\]([\s\S]*?)\[\/area\])|(\b[\p{L}\p{M}]+\b)/gu,
    (match, _, __, word) => {
      // 匹配到已有area标签时,直接返回原内容
      if (word === undefined) return match;
      // 对未被包裹的单词添加area标签
      return `[area=${word}]${word}[/area]`;
    }
  );
}

正则规则说明

  • (?:\[area=([^\]]+)\]([\s\S]*?)\[\/area\]):非捕获组,匹配完整的[area]标签(包含属性和内部所有内容),确保这部分内容不被修改。
  • (\b[\p{L}\p{M}]+\b):捕获带重音的单词,\p{L}匹配所有Unicode字母,\p{M}匹配重音标记(如á、í),u标志启用Unicode模式,保证特殊字符被正确识别。
  • gu标志:g实现全局匹配,u支持Unicode字符集解析。

测试案例

测试输入1

Hola aquí está un ejemplo [area=ejemplo]este está dentro[/area] y otro aquí fuera.

预期输出

[area=Hola]Hola[/area] [area=aquí]aquí[/area] [area=está]está[/area] [area=un]un[/area] [area=ejemplo]ejemplo[/area] [area=ejemplo]este está dentro[/area] [area=y]y[/area] [area=otro]otro[/area] [area=aquí]aquí[/area] [area=fuera]fuera[/area].

测试输入2

[area=test]no tocar esto[/area] y [area=otra]aquí también no[/area]

预期输出

[area=test]no tocar esto[/area] [area=y]y[/area] [area=otra]aquí también no[/area]

测试输入3

Él tiene café y [area=café]este café es especial[/area]

预期输出

[area=Él]Él[/area] [area=tiene]tiene[/area] [area=café]café[/area] [area=y]y[/area] [area=café]este café es especial[/area]

注意事项

  • 该方案不支持[area]标签嵌套,若存在嵌套场景,需结合递归解析逻辑处理(JavaScript原生正则不支持平衡组语法)。
  • 单词边界\b在部分特殊字符场景下可能存在偏差,可替换为(?<![\p{L}\p{M}])([\p{L}\p{M}]+)(?![\p{L}\p{M}]),避免边界识别干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:33:26