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

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

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

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

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

数据截取处理

        // 数据截取处理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, '')

.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 = headtable.content = contentListtable.colNum = head.lengthtable.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);},

 代码贴在这里,存在冗余,大致提供一个思路,因为需求还没评审,暂时把这部分功能做出来了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/616044.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL性能分析-整理

昨日对MySQL的索引整理了一份小文档&#xff0c;对结构/分类/语法等做了一个小总结&#xff0c;具体文章可点击&#xff1a;MySQL-索引回顾&#xff0c;索引知识固然很重要&#xff0c;但引入运用到实际工作中更重要。 参考之前的文章&#xff1a;SQL优化总结以及参考百度/CSDN…

深入探讨:开发连锁餐饮APP的关键技术要点

时下&#xff0c;开发一款功能强大、用户友好的连锁餐饮APP成为许多餐饮企业的当务之急。在本文中&#xff0c;我们将深入探讨开发连锁餐饮APP的关键技术要点&#xff0c;涵盖了前端、后端以及数据库等方面。 一、前端开发 前端是用户与APP交互的入口&#xff0c;因此设计良好…

【QT学习十一】QThread

一、引言 在现代软件开发中&#xff0c;多线程编程变得越来越重要&#xff0c;尤其是对于需要处理并发任务的应用程序。Qt C 框架提供了强大的多线程支持&#xff0c;使得开发者能够轻松地创建和管理多线程应用。 在 Qt 中&#xff0c;多线程的实现主要基于 QThread 类。QThrea…

openLDAP统一认证在nodejs或flask等web系统中的配置使用

在OA&#xff08;办公自动化&#xff09;系统中集成OpenLDAP进行统一认证&#xff0c;通常涉及以下步骤&#xff1a; 配置OpenLDAP服务器&#xff1a; 首先确保你的OpenLDAP服务器已经安装和配置好&#xff0c;并且包含组织内的用户、组以及其他必要属性。这些信息应该包括用户…

比尔盖茨:如果只能解决一个问题,我的答案总是营养不良

谷禾健康 当地时间12月19日&#xff0c;微软联合创始人、亿万富翁比尔盖茨发布了对来年的年度预测&#xff0c;称 2024 年将是一个“转折点”。 在这封长达 10 页的信中他展示了对人工智能领域的更多创新、婴儿营养不良问题的突破、气候变化谈判的进展等多方面的期待。 人工智能…

CentOS7搭建Harbor企业级Docker仓库

centos7搭建Harbor企业级docker仓库 前言 Harbor是一个企业级的Docker Registry管理项目&#xff0c;主要用于存储和分发Docker镜像。它提供了一些企业必需的功能特性&#xff0c;如安全、标识和管理等&#xff0c;以扩展开源Docker Distribution。 作为企业级私有Registry服…

【iOS】数据持久化(四)之FMDB

正如我们前面所看到的&#xff0c;原生SQLite API在使用时还是比较麻烦的&#xff0c;于是&#xff0c;开源社区就出现了一系列将SQLite API进行封装的库&#xff0c;其中FMDB的被大多数人所使用 FMDB和SQLite相比较&#xff0c;SQLite比较原始&#xff0c;操作比较复杂&#…

近日遇到数据库及其他问题

一、查找备份表和原表不一样数据 select * from A where (select count(1) from A_BAK where A.IDA_BAK.ID) 0 二、在数据量比较大的表中新增有默认值的列速度较慢问题 使用 以下语句&#xff0c;在上亿数据的表中执行速度较慢 alter table TEST add col_a integer DEFA…

如何制作能够提高产品的市场认知度的产品说明书模板?

在当今竞争激烈的市场环境中&#xff0c;产品的市场认知度对于企业的成功至关重要。一个深入人心的产品形象&#xff0c;不仅能提高销售额&#xff0c;还能塑造品牌形象&#xff0c;增强消费者忠诚度。那么如何能有效地提高产品的市场认知度呢&#xff1f;接下来就说一下&#…

MySQL数据被误删怎么办?

文章目录 前言数据备份恢复工具数据备份策略数据备份恢复演示备份数据模拟数据误删恢复备份的数据恢复未备份的数据 总结 前言 很多年前&#xff0c;被公司外派到一家单位驻场开发一个OA项目&#xff0c;两个开发对接各部门的需求&#xff0c;需求还要及时生效&#xff08;一边…

Docker进阶数据卷目录挂载及在线部署

前言 为了很好的实现数据保存和数据共享&#xff0c; Docker 提出了 Volume 这个概念&#xff0c;简单的说就是绕过默认的联合 文件系统&#xff0c;而以正常的文件或者目录的形式存在于宿主机上。又被称作数据卷 一. 数据卷介绍 Docker 中的数据卷&#xff08;Volume&#x…

【计算机组成-计算机基本结构】

课程链接&#xff1a;北京大学陆俊林老师的计算机组成原理课 1. 电子计算机的兴起 原因&#xff1a;二战对计算能力的需求世界上第一台通用电子计算机 ENIAC&#xff08;Electronic Numerical Integrator And Computer&#xff09;&#xff1a;时间&#xff1a;1946&#xff1…

Js - 函数(四)

1.函数简单介绍 什么是函数&#xff1f; 函数&#xff08;function&#xff09;是执行特定任务的一段代码块 为什么需要函数&#xff1f; 可以实现代码复用&#xff0c;提高开发效率 2.函数使用 函数的声明语法 函数名命名规范 函数的调用语法 函数体 函数体是函数的构…

数据库开发工具:Navicat Premium 16 (Win/Mac)中文激活版

Navicat Premium 16 是一款强大的数据库管理工具&#xff0c;旨在帮助用户更轻松地管理和维护各种数据库类型。 以下是关于 Navicat Premium 16 的详细介绍&#xff1a; 数据库支持&#xff1a;Navicat Premium 16 支持多种数据库类型&#xff0c;包括 MySQL、PostgreSQL、SQLi…

【vpp2206 测试】

vpp 2206编译# ./extras/vagrant/build.sh # make build # make runstartup-default.conf 的内容cpu {main-core 0 }unix {interactive cli-listen 127.0.0.1:5002log /tmp/vpp.logfull-coredumpstartup-config /home/king/share/vpp/startup.txt }dpdk {uio-driver igb_uiodev…

在Linux下配置Apache HTTP服务器

在Linux的世界里&#xff0c;如果说有什么比解决各种“神秘”的故障更让人头疼&#xff0c;那一定就是配置Apache HTTP服务器了。这不是因为Apache有什么问题&#xff0c;而是因为配置它简直就像解谜游戏&#xff0c;一不留神就会让你陷入无尽的纠结。 首先&#xff0c;你需要…

【AI视野·今日Sound 声学论文速览 第四十五期】Wed, 10 Jan 2024

AI视野今日CS.Sound 声学论文速览 Wed, 10 Jan 2024 Totally 12 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers Masked Audio Generation using a Single Non-Autoregressive Transformer Authors Alon Ziv, Itai Gat, Gael Le Lan, Tal Remez, Felix…

Debian/Ubuntu配置aliyun源和安装工具

将 Debian 10 的 apt-get 源更换为 aliyun&#xff0c;以提升国内环境 apt install 的速度。 1&#xff09;备份原 apt-get 源文件 roote3c22f627b9e:~# cd /etc/apt roote3c22f627b9e:/etc/apt# cp sources.list sources.list.bak 2&#xff09;清除原 apt 源文件内容 ro…

解决python画图无法显示中文的问题

python画图遇到的问题&#xff1a; 中文不显示&#xff1a; 解决方法&#xff1a;把字体设置为支持中文的字体&#xff0c;比如黑体 黑体下载链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1BD7zQEBUfcIs6mC2CPYy6A?pwdv120 提取码&#xff1a;v120 pyhon…

【离散数学】xjtu版离散复习攻略

据学长及同级同学经验&#xff0c;按我校的考察难度&#xff0c;离散数学一天速通不是问题。如果你是正在阅读本篇的学弟/学妹&#xff0c;且复习时间紧张&#xff0c;可考虑把离散放到考前一天来复习。 网络上的资源已经足够详尽&#xff0c;只不过大多数没有介绍自然推理系统…