后端对标签字符串进行操作

背景:

  使用wangEditor时,需要在后端对富文本内容的<img />标签进行操作,而且不止一个,需要将图 片的width和height修改为固定值(358*264)。

法一:XML转为JSON

包:

import cn.hutool.json.JSONObject;

import cn.hutool.json.XML;

import cn.hutool.json.JSONUtil;

效果:

<p><img src="https://www.aikeyunkang.top:8081/api/upload/actionPicture/1668066194737.png" style="max-width:100%;" contenteditable="false" width="50%"/><br/><img src="https://www.aikeyunkang.top:8081/api/upload/actionPicture/1668757490888.jpg" style="max-width:100%;" contenteditable="false"/></p><p _msthash="515125" _msttexthash="6268977">测试</p>

{"p":[{"img":[{"contenteditable":false,"src":"https://www.aikeyunkang.top:8081/api/upload/actionPicture/1668066194737.png","width":"50%","style":"max-width:100%;"},{"contenteditable":false,"src":"https://www.aikeyunkang.top:8081/api/upload/actionPicture/1668757490888.jpg","style":"max-width:100%;"}],"br":""},{"_msttexthash":6268977,"content":、"测试","_msthash":515125}]}

核心代码:

JOSNObject jsonObject = XML.toJSONObject(xml);
String xml = JSONUtil.toXmlStr(jsonObject);                      

法二:使用正则表达式直接匹配

代码及步骤:

 创建正则表达式 :Pattern pattern = Pattern.compile( "<\\s*img\\s+([^>]*)\\s*/>"); 

创建Matcher(匹配器,提供了对正则表达式的分组支持):Matcher matcher = pattern.matcher(content); 

匹配成功:matcher.find()返回true

分组:matcher.group(1) 查找到img标签中的内容后进行replace就ok

public  void xmlToJson() {        String content = "<p><img src=\"https://www.aikeyunkang.top:8084/api/upload/actionPicture/1668066194737.png\" style=\"max-width:100%;\" contenteditable=\"false\" width=\"33\" height=\"22\"/><br/><br/></p><p _msthash=\"515125\" _msttexthash=\"6268977\">测试</p>";        String content1 = "<p><img src=\"https://www.aikeyunkang.top:8081/api/upload/actionPicture/1669194735556.jpg\" style=\"max-width:100%;\" contenteditable=\"false\" width=\"50%\"/><br/><font _mstmutation=\"1\" _msthash=\"20488\" _msttexthash=\"23868\">6666</font><br/><img src=\"https://www.aikeyunkang.top:8081/api/upload/actionPicture/1669432587484.jpg\" style=\"max-width:100%;\" contenteditable=\"false\" width=\"50%\"/></p><p><!--_msttexthash--><!--_msthash--></p><style>max-width:100%;</style>";        String content2 = "<p><img src=\"https://www.aikeyunkang.top:8081/api/upload/actionPicture/1669194735556.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/><br/><br/><font _mstmutation=\"1\" _msthash=\"20488\" _msttexthash=\"23868\">6666</font><br/></p><p><font _mstmutation=\"1\" _msthash=\"20488\" _msttexthash=\"23868\"><img src=\"https://www.aikeyunkang.top:8081/api/upload/actionPicture/1669434182271.jpg\" style=\"max-width:100%;\" contenteditable=\"false\"/></font></p><p><!--_msttexthash--><!--_msthash--></p><style>max-width:100%;</style>";        //获取img标签中的内容        String regxpForEmbedTag = "<\\s*img\\s+([^>]*)\\s*/>";        Matcher matcher = Pattern.compile(regxpForEmbedTag).matcher(content);        StringBuffer sb = new StringBuffer();        //find:只要字符串的部分如果撇配成功就返回true        while (matcher.find()) {            //0表示整个串 , 1表示第一个括号里的内容,以此类推  该括号指的是正则表达式中的括号            String contentTemp = matcher.group(1);            System.out.println(contentTemp);            if (!contentTemp.contains("height")){                contentTemp = replaceContentByPartten(contentTemp,                        "contenteditable=\"false\"", "contenteditable=\"false\"" + " width=\"358\"" + " height=\"264\"");            }else {                contentTemp = replaceContentByPartten(contentTemp,                        "width=\"([^ ]+)\"", "width=\"358\"");                contentTemp = replaceContentByPartten(contentTemp,                        "height=\"([^ ]+)\"", "height=\"264\"");            }            matcher.appendReplacement(sb, "<img "+ contentTemp + "/>");        }        matcher.appendTail(sb);        System.out.println(sb.toString());    }    public static String replaceContentByPartten(String content,                                                 String partten, String target) {        Matcher matcher = Pattern.compile(partten, Pattern.CASE_INSENSITIVE).matcher(content);        if (matcher.find()) {            StringBuffer temp = new StringBuffer();            matcher.appendReplacement(temp, target);            matcher.appendTail(temp);            return temp.toString();        } else {            return content;        }    }

总结:

 1、思路:

      ①本质是字符串,首先想到的是字符串操作(正则表达式)

     ②特殊的字符串:标签语句——用json工具包 

2、由于可能存在多个标签,所以需要使用machter中的group()方法

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值