oldDom= "哈哈哈[開(kāi)心]nr是的呢" //注意 必須新創(chuàng)建一個(gè)變量進(jìn)行分割 //先把字符串中的n換行 替換成<BR> const newDom = oldDom.replace(/n/g,"<BR>"); //下面就開(kāi)始匹配字符串中 <BR>換行 和 [.*]表情 let newDom2 = newDom.split(/(<BR>+)|[([^]]+)]/g).map((s)=>this.getEmojiDom(s)) /** * 替換字符串中的換行和表情 */ getEmojiDom = (textName)=>{ // 如果字符串是換行符的話直接返回br標(biāo)簽 if(textName === '<BR>') return <br /> let s = '';//初始化一個(gè)變量 //emojiArr 是我的表情數(shù)組 emojiArr.map((item,key)=>{ //判斷當(dāng)前的字符串是否 和 我數(shù)組中的表情key一致 如果一致的話就 創(chuàng)建 img標(biāo)簽 并且把表情圖片地址 賦值給img if(item.textName === `[${textName}]`){ s = <img key={`${item.textName}-${key}-${Number.parseInt(new Date().getTime())}`} style={{width:'20px',height:'20px'}} src={`https://img.fendoug.com/Im/Expression/emoji/${item.urlName}@2x.${item.extension}`} /> } }) //判斷如果匹配到了 表情則 返回表情的dom 否則 直接返回字符串 return s==='' ? textName : s }