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

Ace Editor中含Unicode重音字符的关键词高亮问题

解决Ace Editor中带重音Unicode关键词的高亮问题

问题出在\b是ASCII单词边界,仅匹配[a-zA-Z0-9_](即\w)与非\w字符的边界。带重音的Unicode字符属于\W范畴,因此以重音字符结尾的单词,其与后续空白/标点的位置不满足\b的匹配条件,导致无法被识别。

解决方案

使用Unicode属性类自定义单词边界,同时开启正则的Unicode模式(u标志),具体修改如下:

this.$rules = {
    "start": [            
        {
            // 自定义Unicode单词边界,匹配含重音的字母、数字、下划线
            regex: new RegExp("(?<![\\p{L}\\p{M}\\p{N}_])[\\p{L}\\p{M}\\p{N}_]+(?![\\p{L}\\p{M}\\p{N}_])", "u"),
            token: keywordMapper
        },
    ]
};
this.normalizeRules()

正则说明

  • (?<![\p{L}\p{M}\p{N}_]):反向预查,确保当前位置前不是单词字符(\p{L}匹配所有语言字母,\p{M}匹配重音等附加标记,\p{N}匹配数字,_保留原规则)
  • [\p{L}\p{M}\p{N}_]+:匹配一个或多个合法的单词字符(包含带重音的Unicode字母)
  • (?![\p{L}\p{M}\p{N}_]):正向预查,确保当前位置后不是单词字符
  • "u"标志:开启Unicode模式,让正则正确解析Unicode属性类与字符

适配含特殊字符的关键词

如果你的关键词包含撇号(如jusqu’à),只需把撇号加入单词字符集即可:

regex: new RegExp("(?<![\\p{L}\\p{M}\\p{N}_'])[\\p{L}\\p{M}\\p{N}_']+(?![\\p{L}\\p{M}\\p{N}_'])", "u")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:23:24