最终效果展示
T1

T2

T3

T4

需求
- 把评论
你好帅啊啊啊[开心][开心]
,[开心] 替换为图片
思路
- 正则match提取
[开心]
到一个数组 - 数组去重
- 创建img标签
- img标签转文本. 。例:
(el.outerHTML)
,将el元素转文本 - 字符串replaceAll方法替换表情文本为标签转换的文本
- 使用innerHTML渲染到页面
码
<div id='em'></div>
<script>
const emjioList = [
{
name: '[开心]',
src: 'public/emjio/1678782525035.gif'
},
{
name: '[对不起]',
src: 'public/emjio/1678782526027.gif'
},
]
const noReArr = (arr) => [...new Set(arr)]
let 评论 = '你好帅啊啊啊[开心][开心]'
const reg = new RegExp("\\[.*?]", "gi");
const emjioStrArr = 评论.match(reg);
const noRepEmjioArr = noReArr(emjioStrArr)
noRepEmjioArr.forEach(it => {
const createImg = document.createElement("img");
const { src } = emjioList.find(it2 => it2.name === it);
createImg.src = src
const imgElToString = createImg.outerHTML;
评论 = 评论.replaceAll(it, imgElToString);
});
document.getElementById('em').innerHTML = 评论
</script>
效果图
