1. /**
    2. * 解析富文本字符串url跟电话转译
    3. * @param {String} text
    4. * @returns
    5. */
    6. const filterInputInfo = text => {
    7. const reg1 = /<[a-zA-Z]+.*?>([\s\S]*?)<\/[a-zA-Z]*?>/g
    8. const reg2 = /<img [^>]*src=['"]([^'"]+)[^>]*>/g
    9. 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)
    10. const str = '<a href="tel:$&">$&</a>'
    11. let message = ''
    12. try {
    13. const div = document.createElement('div')
    14. div.innerHTML = text
    15. let pValue = [...div.children]
    16. pValue.forEach(item => {
    17. if (item.tagName === 'P') { // 判断是p标签内的内容
    18. const valueList = []
    19. const AList = []
    20. const imgList = []
    21. let value = item.innerHTML
    22. // ${}过滤所有标签 {$}img标签 {$$}a标签
    23. value = value.replace(reg1, function(nodeValue) { // 过滤所有标签并提取出来
    24. valueList.push(nodeValue)
    25. return '${}'
    26. })
    27. value = value.replace(reg2, function(nodeValue) { // 过滤所有img标签并提取出来
    28. imgList.push(nodeValue)
    29. return '{$}'
    30. })
    31. value = replaceTextLink(value) // 过滤所有超链接并包裹a标签
    32. value = value.replace(reg1, function(nodeValue) { // 过滤所有标签并提取出来
    33. AList.push(nodeValue)
    34. return '{$$}'
    35. })
    36. value = value.replace(reg, str) // 过滤手机号并包裹a标签
    37. AList.forEach(item => { // 把过滤出来的a标签替换进去
    38. value = value.replace('{$$}', item)
    39. })
    40. imgList.forEach(item => { // 把过滤出来的img替换进去
    41. value = value.replace('{$}', item)
    42. })
    43. valueList.forEach(item => { // 把过滤出来的所有标签替换进去
    44. value = value.replace('${}', item)
    45. })
    46. message += `<p>${value}</p>` // 拼接
    47. } else {
    48. message += item.outerHTML // 拼接其他标签
    49. }
    50. })
    51. } catch (error) {
    52. console.log(error)
    53. return text
    54. }
    55. return message
    56. }
    57. /**
    58. * 将文本中url替换成超链接
    59. * @param { String } content
    60. */
    61. const replaceTextLink = content => {
    62. const rule = /(http:\/\/|https:\/\/|www\.)((\w|=|\?|\.|\/|&|%|-)+)/g
    63. if (rule.exec(content)) {
    64. if (content.indexOf('www.') === 0) {
    65. content = content.replace(rule, "<a rel='noopener noreferrer' target='_blank' href='http://$1$2'>$1$2</a>")
    66. } else {
    67. content = content.replace(rule, "<a rel='noopener noreferrer' target='_blank' href='$1$2'>$1$2</a>")
    68. }
    69. }
    70. return content
    71. }