react-native-controlled-mentions多提及替换失效问题求助
解决react-native-controlled-mentions中replaceMentionValues多提及转换失效问题
问题重现
单提及场景下replaceMentionValues可正常转换:
import { replaceMentionValues } from 'react-native-controlled-mentions'; const value = 'Hello @[David Tabaka](5)! How are you?'; console.log(replaceMentionValues(value, ({id}) => `@${id}`)); // Hello @5! How are you? console.log(replaceMentionValues(value, ({name}) => `@${name}`)); // Hello @David Tabaka! How are you?
但处理多提及文本时:
@[demo5](d3f0c3cd-f363-4303-8761-8e190f054be3) @[demo8](8dbafd40-b86f-490a-828d-d11dfe221b43) test
调用replaceMentionValues(text, ({name}) => @${name})后,仅第一个提及被转换,结果为:
@demo5 @[demo8](8dbafd40-b86f-490a-828d-d11dfe221b43) test
解决方案
方案1:手动实现全局替换逻辑
绕过库内置函数的匹配限制,自定义正则实现全局匹配替换:
function customReplaceMentionValues(text, replacer) { // 全局匹配@[name](id)格式的所有提及实例 const mentionRegex = /@\[([^\]]+)\]\(([^)]+)\)/g; return text.replace(mentionRegex, (match, name, id) => { return replacer({ name, id }); }); } // 使用示例 const text = '@[demo5](d3f0c3cd-f363-4303-8761-8e190f054be3) @[demo8](8dbafd40-b86f-490a-828d-d11dfe221b43) test'; const result = customReplaceMentionValues(text, ({name}) => `@${name}`); console.log(result); // 输出:@demo5 @demo8 test
方案2:升级库版本
检查当前使用的react-native-controlled-mentions版本,确认是否存在已知的多提及匹配bug。若有,升级到包含修复的最新版本即可解决问题。
方案3:反馈问题给库维护者
如果确认是库内置函数的逻辑缺陷,可在库的代码仓库提交Issue,附上复现代码和问题描述,等待维护者修复。
内容的提问来源于stack exchange,提问作者famfamfam
相关产品推荐
相关产品推荐

