最近做聊天室项目需要把用户输入的文本内容转换为图片表情例如:'你好[hehe],试试' => 你好<img src="hehe.png">,试试[hehe]这种格式的就是一个表情,需要替换成图片由于模块化和安全考虑,不能直接把出现的位置直接替换成html,需要返回一个数组,text、img按照顺序排列,自己用正则处理的,尽管能实现,但是个人不太满意:'[ss]s[sdd][sdf]sd'.split(/(?=\[[A-Za-z\u4E00-\u9FA5\uF900-\uFA2D]+?])/).reduce(function (prev, curr) { let index = curr.indexOf(']') let first = curr.substr(0, index + 1) let last = curr.substr(index + 1) return prev.concat([first, last])}, [])// ["[ss]", "s", "[sdd]", "", "[sdf]", "sd"]有没有做过类似需求的正则大佬?
1 回答
FFIVE
TA贡献1797条经验 获得超6个赞
关于split一个不为人知的地方:
匹配的正则中的捕获分组会被添加到结果中!
'[ss]s[sdd][sdf]sd'.split(/(\[[^[\]]+\])/)
// 搞定!=> ["", "[ss]", "s", "[sdd]", "", "[sdf]", "sd"]
添加回答
举报
0/150
提交
取消