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
相关产品推荐
相关产品推荐

