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

Angular正则匹配优化:避免匹配单词内部的目标词汇

解决方案

问题根源

原正则未添加独立词汇的边界约束,导致目标词汇作为其他单词的子串时被误匹配(如"lookman"中的"MAN")。

核心修改点

  1. 转义正则特殊字符:避免目标词汇中的正则元字符(如.、*等)破坏正则结构
  2. 添加Unicode兼容的边界断言:用(?<!\p{L})(前面不是Unicode字母)和(?!\p{L})(后面不是Unicode字母)确保目标词汇是独立单元,同时启用u标志支持土耳其语特殊字符(如ç、ğ)的匹配

修改后的代码

正则转义工具函数

private escapeRegExp(str: string): string {
  // 转义所有正则特殊元字符
  return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}

生成修正后的正则

const escapedKeywords = this.highlightWordList.map(item => {
  const escapedWord = this.escapeRegExp(item.highWord);
  // 添加Unicode边界断言,确保词汇独立存在
  return `(?<!\\p{L})${escapedWord}(?!\\p{L})`;
});

const searchRgx = new RegExp(escapedKeywords.join("|"), 'giu');

保留原替换逻辑(无需修改)

return txt.replace(searchRgx, (match) => {
  const foundedKeyword = this.highlightWordList.find(item => 
    item.highWord.toLowerCase() === match.toLowerCase()
  ) || { color: 'white' };

  return `<span style='background-color:${foundedKeyword.color};'>${match}</span>`;
});

效果验证

  • 输入"lookman"时,不会误匹配其中的"MAN"子串
  • 输入"MAN"、"xxx MAN yyy"、"Ağır vasıta"等独立词汇/短语时,会正确匹配并高亮
  • 兼容土耳其语特殊字符及多词短语的独立匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:57:14