javascript - 如何从Javascript中的字符串解析标记
问题描述
我一直在使用一个包react-mentions
来实现一种在社交媒体应用程序中常见的类似提及的功能。
结果文本字段显示为:
@[admin](user_id:3) hey there! @[test](vendor_id:1) @[project test](project_id:1) asdadstext example
我不熟悉标记的工作原理,如何处理这句话,以便获得结果数据:
data = {
user: [{user_id:3}]
vendor: [{vendor_id:1 }]
project: [{project_id:1}]
}
我还想问一个额外的问题,以更好地了解标记的工作原理。我是否能够将整个字符串与标记一起保存,当它显示时浏览器将自动处理标记并转换(例如)
@[admin](user:3)
到 admin
?
下面是一个运行代码的例子:
解决方案
使用matchAll()
/@\[(.*?)]\((.*?):(\d+)\)/g
const markup = ' @[admin](user:3) hey there! @[test](vendor:1) @[project test](project:1) asdadstext example'
const parser = (markup) => {
return [...markup.matchAll(/@\[(.*?)]\((.*?):(\d+)\)/g)]
.reduce((a, v) => {
a[v[2]] = (a[v[2]] || []).concat({id: +v[3], username: v[1]})
return a
}, {})
}
console.log(parser(markup))
推荐阅读
- php - 使用 jQuery 刷新 php 数据不起作用
- c# - C# & SQL Server 实时 DML 事件
- typescript - 元素隐式具有“任何”类型,因为“字符串”类型的表达式
- material-design - Google Material Ripple 效果不适用于 Sveltejs
- javascript - Firebase:我必须单击“继续”按钮两次才能执行任何操作
- javascript - 具有透明背景和渐变边框的元素
- python - 有没有一种有效的方法可以根据数组中的位置计算 numpy 数组中的值?
- json - 大规模合并基于多个键的 JSON 文件
- ios - iOS 13 中的 UIImagePickerController:苹果放弃导航栏可定制性了吗?
- visual-studio-2019 - 构建:1 成功,2 失败,0 最新,0 跳过 Visual Studio 2019