/** * 解析富文本字符串url跟电话转译 * @param {String} text * @returns */const filterInputInfo = text => { const reg1 = /<[a-zA-Z]+.*?>([\s\S]*?)<\/[a-zA-Z]*?>/g const reg2 = /<img [^>]*src=['"]([^'"]+)[^>]*>/g const reg = new RegExp(/[1][3,4,5,6,7,8,9][0-9]{9}|(400|010|95|10)(-|\d|\s){6,9}(\d){1,4}/g) const str = '<a href="tel:$&">$&</a>' let message = '' try { const div = document.createElement('div') div.innerHTML = text let pValue = [...div.children] pValue.forEach(item => { if (item.tagName === 'P') { // 判断是p标签内的内容 const valueList = [] const AList = [] const imgList = [] let value = item.innerHTML // ${}过滤所有标签 {$}img标签 {$$}a标签 value = value.replace(reg1, function(nodeValue) { // 过滤所有标签并提取出来 valueList.push(nodeValue) return '${}' }) value = value.replace(reg2, function(nodeValue) { // 过滤所有img标签并提取出来 imgList.push(nodeValue) return '{$}' }) value = replaceTextLink(value) // 过滤所有超链接并包裹a标签 value = value.replace(reg1, function(nodeValue) { // 过滤所有标签并提取出来 AList.push(nodeValue) return '{$$}' }) value = value.replace(reg, str) // 过滤手机号并包裹a标签 AList.forEach(item => { // 把过滤出来的a标签替换进去 value = value.replace('{$$}', item) }) imgList.forEach(item => { // 把过滤出来的img替换进去 value = value.replace('{$}', item) }) valueList.forEach(item => { // 把过滤出来的所有标签替换进去 value = value.replace('${}', item) }) message += `<p>${value}</p>` // 拼接 } else { message += item.outerHTML // 拼接其他标签 } }) } catch (error) { console.log(error) return text } return message}/** * 将文本中url替换成超链接 * @param { String } content */const replaceTextLink = content => { const rule = /(http:\/\/|https:\/\/|www\.)((\w|=|\?|\.|\/|&|%|-)+)/g if (rule.exec(content)) { if (content.indexOf('www.') === 0) { content = content.replace(rule, "<a rel='noopener noreferrer' target='_blank' href='http://$1$2'>$1$2</a>") } else { content = content.replace(rule, "<a rel='noopener noreferrer' target='_blank' href='$1$2'>$1$2</a>") } } return content}