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

react-native-highlight-words无法高亮含撇号单词,求修复方案

解决react-native-highlight-words无法高亮含撇号单词的问题

问题根源

react-native-highlight-words默认的autoEscape属性会转义搜索词里的特殊字符(包括撇号),导致无法匹配文本中原生的撇号;同时默认匹配逻辑会把撇号当作单词分隔符,没法识别带撇号的完整单词。

修复方案

1. 关闭自动转义,直接匹配完整带撇号关键词

如果你的searchParam本身就是带撇号的单词(比如用户输入了l'areal),只需关闭autoEscape,让搜索词以原始形式匹配文本:

<Highlighter
  style={styles.searchResultTxt}
  highlightStyle={styles.highlightedStyle}
  searchWords={[searchParam, 'Doctor']} // 移除单独的撇号条目
  textToHighlight={renderDisplayText(data)}
  ellipsizeMode={'tail'}
  numberOfLines={1}
  autoEscape={false} // 关闭自动转义
/>

2. 自定义正则匹配规则(针对部分匹配场景)

如果用户输入的是不带撇号的关键词(比如areal),需要匹配包含该关键词的带撇号单词(比如l'areal),可以通过matchProp自定义正则逻辑:

// 构造匹配含撇号单词的正则
const escapeRegExp = (str) => str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
const getMatchPattern = (searchWord) => {
  // 匹配包含搜索词的单词,允许前后出现撇号
  return new RegExp(`\\b\\w*'?${escapeRegExp(searchWord)}'?\\w*\\b`, 'gi');
};

<Highlighter
  style={styles.searchResultTxt}
  highlightStyle={styles.highlightedStyle}
  searchWords={[searchParam, 'Doctor'].map(word => getMatchPattern(word))}
  textToHighlight={renderDisplayText(data)}
  ellipsizeMode={'tail'}
  numberOfLines={1}
  matchProp="regex" // 指定使用正则匹配
/>

3. 注意事项

关闭autoEscape后,如果搜索词包含正则特殊字符(如.、*等),必须用escapeRegExp手动转义,避免正则匹配出错。

内容的提问来源于stack exchange,提问作者sankeerthan-v-r

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 05:20:30