数据截取处理、富文本去除所有标签

这篇具有很好参考价值的文章主要介绍了数据截取处理、富文本去除所有标签。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前提:在做项目中有个需求是填写表单后生成一份文档,文档可以编辑、保存。

这部分用富文本处理了,涉及到的逻辑就是对象-->富文本标签形式

在给后端传的数据格式再把富文本标签形式-->对象形式。

涉及到文字,图片、表格,以及图片表格的标题。

数据截取处理

        // 数据截取处理
        extractString(str, startChar, endChar) {
            const pattern = `${startChar}(.*?)${endChar}`;
            const regex = new RegExp(pattern);
            const matches = str.match(regex);
            return matches ? matches[1] : '';
        },

用法:

let a = this.extractString(item, '<img', '</p>')

 item就是要处理的字串,后面一个开始元素,一个结束元素。

富文本去除所有标签

str='<div class="proposal-content" style="text-indent:2em; font-size:16px; line-height:1.5">光伏组件在运行过程中,光电转换效率会受到影响,输出功率有所降低。本报告年衰减率根据《光伏制造行业规范条件(2021年本)》计算,晶硅组件衰减率首年不高于2.5%,后续每年不高于0.6%。</div>'
let a = str.replace(/<[^>]+>/g, '')
// 得到的结果就是去除所有标签的:光伏组件在运行过程中,光电转换效率会受到影响,输出功率有所降低。本报告年衰减率根据《光伏制造行业规范条件(2021年本)》计算,晶硅组件衰减率首年不高于2.5%,后续每年不高于0.6%。

.replace替换其他数据:

proposalString = proposalString.replace(new RegExp('<p data-we-empty-p="" style="padding-left:2em;">', 'g'), paragraph);

‘g’是全局替换,不然只会替换第一个。

富文本转对象大致实现思路:

因为要数据对应,以下是后端传过来的数据:

          let obj = [
                {
                    content:
                        '合浦位于广西壮族自治区北海市合浦县合浦闸口镇。项目所在地的经纬度坐标为21.69°N, 109.52°E。\n合浦县,属亚热带季风型海洋性气候区,日照较强,热量充足,雨量充沛,夏热冬暖,无霜期长。气候受季风环流控制,雨热同季。冬干夏湿,夏无酷暑,冬无严寒,盛行风向有明显的季节性转换,在沿海乡镇还有昼夜交替的海陆风出现。由于各季节雨热不均以及濒临北部湾,主要气象灾害有台风、暴雨、干旱、低温阴雨及霜冻、冰雹、雷电和龙卷风等。主要气候特征是年平均气温偏高,年总降雨量偏多,年总日照时数偏多。\n',
                    image: {
                        title: '项目所在位置图',
                        path: 'https://xidianai.oss-cn-hangzhou.aliyuncs.com/xdai_78abb1eb_loc_map.png',
                        index: 1,
                    },
                    table: {
                        title: '',
                        rowNum: '',
                        colNum: '',
                        head: [],
                        content: [],
                    },
                },
            ];

对应回显在富文本,

思路:遍历数据结构,加上标签,富文本本身是会回显标签的

                         this.$nextTick(() => {
                            let content = '';
                            this.chapterList.chapterContent.forEach(item => {
                                if (item.content) {
                                    content += item.content
                                        .replace(/\n\n\n/g, '<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;')
                                        .replace(/\n\n/g, '<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;');
                                    content = content.replace(/\n/g, `<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`);
                                }
                                // 图片回显
                                if (item.image.path) {
                                    content += `<div class="img" style="width: 100%;display: flex;flex-direction: column;justify-content: center;align-items: center;"><img src=${item.image.path} /><div style="font-size: 14px;">图${this.chapterList.chapterIndex}-${item.image.index}  <span class="img-title">${item.image.title}</span></div></div><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`;
                                }
                                // 表格回显
                                if (item.table.title) {
                                    content += `<div class="table" style="width:100%;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span>表${this.chapterList.chapterIndex}-${item.table.index}  ${item.table.title}</span><table border="1" cellspacing="0" cellpadding="0" style="width: 100%;"><tbody><tr>`;
                                    item.table.head.forEach(item => {
                                        content += `<th>${item}</th>`;
                                    });
                                    content += `<tr>`;
                                    item.table.content.forEach(item => {
                                        content += `<tr>`;
                                        item.forEach(item => {
                                            content += `<td>${item}</td>`;
                                        });
                                        content += `</tr>`;
                                    });
                                    content += `</tbody></table></div><div class="proposal-content" style="text-indent:2em; font-size:16px; line-height:1.5"></div>`;
                                }
                            });
                            content = `<div class="proposal-content" style="text-indent:2em; font-size:16px; line-height:1.5">${content
                                .replace(`<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`, ``)
                                .replace(new RegExp('°E。'), `°E。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`)}</div>`;
                            this.editor.txt.html(content);
                        });

用户编辑完成后保存,富文本转对象操作思路:特定标签用replace()替换后,split()成数组,这样obj就拿到了,然后遍历,分开处理content文字,图片,以及图片标题,表格以及表格标题。

        // 保存
        saveProposal() {
            console.log(this.editor.txt.html());
            let obj = [
                {
                    content:
                        '合浦位于广西壮族自治区北海市合浦县合浦闸口镇。项目所在地的经纬度坐标为21.69°N, 109.52°E。\n合浦县,属亚热带季风型海洋性气候区,日照较强,热量充足,雨量充沛,夏热冬暖,无霜期长。气候受季风环流控制,雨热同季。冬干夏湿,夏无酷暑,冬无严寒,盛行风向有明显的季节性转换,在沿海乡镇还有昼夜交替的海陆风出现。由于各季节雨热不均以及濒临北部湾,主要气象灾害有台风、暴雨、干旱、低温阴雨及霜冻、冰雹、雷电和龙卷风等。主要气候特征是年平均气温偏高,年总降雨量偏多,年总日照时数偏多。\n',
                    image: {
                        title: '项目所在位置图',
                        path: 'https://xidianai.oss-cn-hangzhou.aliyuncs.com/xdai_78abb1eb_loc_map.png',
                        index: 1,
                    },
                    table: {
                        title: '',
                        rowNum: '',
                        colNum: '',
                        head: [],
                        content: [],
                    },
                },
            ];
            // 段落
            let paragraph = '<div class="proposal-content" style="text-indent:2em; font-size:16px; line-height:1.5">';
            let proposalArr = [];
            // let proposalString =
            //     '<div class="proposal-content" style="text-indent:2em; font-size:16px; line-height:1.5">光伏组件在运行过程中,光电转换效率会受到影响,输出功率有所降低。本报告年衰减率根据《光伏制造行业规范条件(2021年本)》计算,晶硅组件衰减率首年不高于2.5%,后续每年不高于0.6%,25年内不。本项目运营期内逐年上网电量见下表。<div class="table" style="width:100%;display: flex;flex-direction: column;justify-content: center;align-items: center;"><span>表6-1  本项目运营期逐年上网电量统计表</span></div><table border="0" width="100%" cellpadding="0" cellspacing="0"><tbody><tr><th>年份</th><th>年发电量万kWh</th><th>累计发电量万kWh</th><th>年利用小时数h</th></tr><tr></tr><tr><td>1</td><td>59525.59</td><td>59525.59</td><td>1026.3</td></tr><tr><td>19</td><td>55196.46</td><td>1089859.46</td><td>951.66</td></tr></tbody></table><p><br/></p>&nbsp; &nbsp; &nbsp; &nbsp;</div>';
            let proposalString = this.editor.txt.html();
            // text-align:left; text-align:center;替换(图后文本)
            proposalString = proposalString.replace(
                new RegExp(
                    '<div class="proposal-content" style="text-indent:2em; font-size:16px; line-height:1.5; text-align:center;">',
                    'g'
                ),
                paragraph
            );
            proposalString = proposalString.replace(
                new RegExp(
                    '<div class="proposal-content" style="text-indent:2em; font-size:16px; line-height:1.5; text-align:left;">',
                    'g'
                ),
                paragraph
            );
            // 新增文本
            proposalString = proposalString.replace(new RegExp('<p data-we-empty-p="" style="padding-left:2em;">', 'g'), paragraph);
            proposalString = proposalString.replace(new RegExp(paragraph), ``).replace(new RegExp(paragraph, 'g'), `aabb`).split('aabb');
            proposalString.forEach(item => {
                let content = '';
                let image = {};
                let table = {};
                // 处理图片数据
                if (this.extractString(item, 'src="', '"').length > 0) {
                    image.path = this.extractString(item, 'src="', '"');
                    if (item.includes('<span class="img-title">')) {
                        // 图片标题
                        image.title = this.extractString(item, '<span class="img-title">', '</span>');
                        item = item.replace(this.extractString(item, '<img', '</span>'), '');
                    } else {
                        // 编辑图片标题(居中)
                        image.title = this.extractString(item, '<p data-we-empty-p="" style="text-align:center;">', ' ');
                        image.title = this.extractString(item, image.title, '</p>');
                        // 去除img文字
                        item = item.replace(this.extractString(item, '<img', '</p>'), '');
                    }
                } else {
                    image.path = '';
                    image.title = '';
                }
                // 处理表格数据
                if (item.indexOf('tbody><tr><th>') > -1) {
                    let tableData = this.extractString(item, '<table', '</table>');
                    let tableHeadArr = []; // 截取的要处理的数据
                    let head = []; // 表头
                    let contentList = []; // 表格内容
                    // 获取表头
                    if (item.indexOf('<th>') > -1) {
                        tableHeadArr = tableData.replace(new RegExp('<th>', 'g'), 'tableHead').split('tableHead');
                    }
                    tableHeadArr.forEach(m => {
                        if (m.indexOf('</th>') > -1) {
                            head.push(this.extractString(m, '', '</th>'));
                        }
                    });
                    // 获取表格内容
                    let tableContentOld = tableData.split('</th></tr>')[1]
                    if (tableContentOld.indexOf('<tr><td>') > -1) {
                        tableContentOld = tableContentOld.replace(new RegExp('<tr><td>', 'g'), 'tableContent').split('tableContent');
                        tableContentOld.forEach(m => {
                          let contentArr = []
                          if(m.replace(/<[^>]+>/g, '')){
                            m.replace(new RegExp('</td>', 'g'),'cloumn').replace(new RegExp('<td>', 'g'),'').split('cloumn').forEach((n)=>{
                              if(n.replace(/<[^>]+>/g, '')){
                                contentArr.push(n);
                              }
                            })
                            contentList.push(contentArr);
                          }
                        })
                        // 去除table文字
                        item = item.replace(this.extractString(item, '<img', '</p>'), '');
                    }
                    // table.title = title;
                    table.head = head
                    table.content = contentList
                    table.colNum = head.length
                    table.rowNum = contentList.length
                }
                // 段落文字处理(去除图片、表格数据、标签、占位符等)
                content = item.replace(new RegExp('<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;', 'g'), '\n').replace(/<[^>]+>/g, '');
                proposalArr.push({ content: content, image: image, table: table });
            });
            console.log(proposalArr);
        },

 代码贴在这里,存在冗余,大致提供一个思路,因为需求还没评审,暂时把这部分功能做出来了。文章来源地址https://www.toymoban.com/news/detail-813349.html

到了这里,关于数据截取处理、富文本去除所有标签的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【前端web入门第一天】01 开发环境、HTML基本语法文本标签

    文章目录: 1. 准备开发环境 1.1 vs Code基本使用 2.HTML文本标签 2.1 标签语法 2.2 HTML基本骨架 2.3 标签的关系 2.4 注释 2.5 标题标签 2.6 段落标签 2.7 换行与水平线标签 2.8 文本格式化标签 VSCode与谷歌浏览器离线版,安装包评论区自提. VSCode默认安装位置:C:UsershpAppDataLocalProgramsMic

    2024年01月25日
    浏览(41)
  • web前端之多行文本擦除效果、文本逐个显示或展示、创建元素标签、querySelector、createElement、appendChild、requestAnimationFrame

    前言 window.requestAnimationFrame()告诉浏览器——你希望执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。该方法需要传入一个回调函数作为参数,该回调函数会在浏览器下一次重绘之前执行。 备注:若你想在浏览器下次重绘之前继续更新下一帧动画

    2024年03月24日
    浏览(34)
  • RSAUtil 前端 JavaScript JSEncrypt 实现 RSA (长文本)加密解密

    文章归档:https://www.yuque.com/u27599042/coding_star/cl4dl599pdmtllw1 import JSEncrypt from ‘jsencrypt’ import {stringIsNull} from “@/utils/string_utils.js”:https://www.yuque.com/u27599042/coding_star/slncupw7un3ce7cb import {isNumber} from “@/utils/number_utils.js”:https://www.yuque.com/u27599042/coding_star/tuwmm3ghf5lgo4bw 注意: 此方

    2024年04月22日
    浏览(51)
  • 前端 富文本编辑器原理——从javascript、html、css开始入门

    大家好,我是yma16,本文分享关于前端 富文本编辑器原理——从javascript、html、css开始。 富文本编辑器 富文本编辑器是指具有格式化文本和图像编辑功能的文本编辑器 参考文档:https://w3c.github.io/selection-api/#abstract 全局属性 contenteditable 是一个枚举属性,表示元素是否可被用

    2024年02月08日
    浏览(33)
  • 【数据动态填充到element表格;将带有标签的数据展示为文本格式】

    一:数据动态填充到element表格; 二:将带有标签的数据展示为文本格式; 1、 2、data 3、methods

    2024年02月15日
    浏览(27)
  • js实现一行半文本的截取

    最近遇到一个需求是要在第二行的中间截取文本,因为在后面得贴一个图标,所以这种情况用常规的css截取文本有点难处理。于是在上网查阅后发现了几个方法:第一种是用伪元素加定位,把.;11..盖在文字的上面;第二种就是用js来实现了。 首先贴下常规的css截取文本的代

    2024年02月10日
    浏览(25)
  • chatgpt赋能python:Python数据处理之去除NaN值

    作为数据分析和处理领域中的一种高效工具,Python 在数据清理方面表现优异。而 NaN 是数据处理中常见的问题之一,过多的 NaN 值常常会导致分析结果不准确或无法得出结论,因此 Python 提供了多种方法去除 NaN 值。 NaN 即 Not A Number 的缩写,表示不是一个数字。NaN 值是在进行

    2024年02月14日
    浏览(30)
  • 用Python+OpenCV截取视频中所有含有字幕的画面

    有的视频文件的字幕已经压制到了 视频的图像中 ,不能单独提取出字幕文件。网上的 “提取视频字幕” 网站多为提取视频中的字幕文件,而非识别视频 图像中 的字幕。少数通过OCR技术识别画面中字幕的工具需要在线运行、运行速度较慢,或者需要收费,使用不够灵活。

    2024年04月10日
    浏览(31)
  • js如何截取某个字符串前面所有的字符串

    利用substring()方法截取出字符 1.新建一个字符串 2.通过indexOf()方法获取你想截止到的那个字符 3.通过substring()方法,从字符串0位置开始截取至\\\"p\\\"前面的字符串

    2024年02月12日
    浏览(35)
  • 【前端异常】JavaScript错误处理:分析 Uncaught(in promise) error

    在开发过程中,JavaScript的错误处理是一个老生常谈的话题。当应用程序发生未捕获的异常时,Uncaught(in promise) error是其中最常见的错误类型。这篇文章将从多个方面详细阐述这种错误类型的原因与解决方案。 Promise是一种用于异步编程的原生JavaScript对象。它提供了一种处理异

    2024年02月05日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包