java调用js实现富文本过滤

简介: java调用js实现富文本过滤

场景


有个需求,后台文章编辑的是富文本,app显示有问题,但是app处理话标签比较麻烦,web端是可以的,因此,方案1是让app请求一个web页面,web页面获取我们的富文本原始内容,然后通过正则转换,方案2是在后台调用前端已经调试好的正则,直接给app,效果更好。


但是js的正则比较灵活,java的正则写法太过麻烦,不想折腾了,于是,我想到了可以调用java内置的js引擎,直接使用前端给的js正则即可。


具体操作如下:


1.准备js正则,放在springboot工程resource文件夹下:


1dc618a0ed9580ce8bfa6facb208c08f.png

formatH5内容如下:


'use strict';
function getFormatRichText(html) {
   var newContent = undefined;
   newContent = html.replace(/<img[^>]*>/gi, function (match) {
       var resolve = undefined;
       resolve = match.replace(/style="[^"]+"/gi, function (styleMatch) {
           var arr = styleMatch.split('=');
           arr[1] = arr[1].substr(0, arr[1].length - 1) + 'width:100%;"';
           return arr.join('=');
       });
       resolve = match.replace(/width="[^"]+"/gi, '');
       resolve = match.replace(/height="[^"]+"/gi, '');
       return resolve;
   });
   newContent = newContent.replace(/style="[^"]+"/gi, function (match) {
       var resolve = match.replace(/width:[^;]+;/gi, 'max-width:100%;');
        resolve = resolve.replace(/min-max-width:[^;]+;/gi, 'min-width:100%;');
        resolve = resolve.replace(/max-max-width:[^;]+;/gi, 'max-width:100%;');
       return resolve;
   });
   newContent = newContent.replace(/<br[^>]*\/>/gi, '');
   return newContent;
}


2.业务代码


public BusinesArticle appInfo(String articleId) {
        //获取文章内容
        BusinesArticle article = getById(articleId);
        if(StringUtils.isNotBlank(article.getArticleContent())){
            try{
                ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
                //获取文件路径
//                File file = ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX+ "formatH5.js");
                InputStream inputStream = RegionUtil.class.getResourceAsStream("/formatH5.js");
                InputStreamReader reader = new InputStreamReader(inputStream);
                //执行文件
                engine.eval(reader);
                Invocable invocable = (Invocable) engine;
                //调用js中函数
                String  result = (String) invocable.invokeFunction("getFormatRichText", article.getArticleContent());
                logger.info(result);
                article.setArticleContent(result);
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        return article;
    }


3.注意问题


1.java8-java15只能解析es5


2.读取文件必须用流方式


相关文章
|
1月前
|
Java API Apache
Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
【10月更文挑战第29天】Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
136 5
|
2月前
|
缓存 JavaScript 前端开发
Java 如何确保 JS 不被缓存
【10月更文挑战第19天】在 Java 中,可以通过设置 HTTP 响应头来确保 JavaScript 文件不被浏览器缓存。方法包括:1. 使用 Servlet 设置响应头,通过 `doGet` 方法设置 `Expires`、`Cache-Control` 和 `Pragma` 头;2. 在 Spring Boot 中配置拦截器,通过 `NoCacheInterceptor` 类和 `WebConfig` 配置类实现相同功能。这两种方法都能确保每次请求都能获取到最新的 JavaScript 内容。
|
1月前
|
开发框架 JavaScript 前端开发
HarmonyOS UI开发:掌握ArkUI(包括Java UI和JS UI)进行界面开发
【10月更文挑战第22天】随着科技发展,操作系统呈现多元化趋势。华为推出的HarmonyOS以其全场景、多设备特性备受关注。本文介绍HarmonyOS的UI开发框架ArkUI,探讨Java UI和JS UI两种开发方式。Java UI适合复杂界面开发,性能较高;JS UI适合快速开发简单界面,跨平台性好。掌握ArkUI可高效打造符合用户需求的界面。
116 8
|
2月前
|
缓存 JavaScript 前端开发
Java 如何确保 JS 不被缓存
大家好,我是 V 哥。本文探讨了 Java 后端确保 JavaScript 不被缓存的问题,分析了文件更新后无法生效、前后端不一致、影响调试与开发及安全问题等场景,并提供了使用版本号、设置 HTTP 响应头、配置静态资源缓存策略和使用 ETag 等解决方案。最后讨论了缓存的合理使用及其平衡方法。
105 0
|
2月前
|
JavaScript Java
Java 控制台VUE.JS的使用
Java 控制台VUE.JS的使用
24 0
|
2月前
|
JavaScript
js 特殊文本的判断
js 特殊文本的判断
42 0
|
5月前
|
前端开发 JavaScript
文本,wangEditor5展示HTML无样式,wangEditor5如何看源码,Ctrl + U看CSS文件,代码高亮,Prism.js可以实现,解决方法,参考网页源代码的写法
文本,wangEditor5展示HTML无样式,wangEditor5如何看源码,Ctrl + U看CSS文件,代码高亮,Prism.js可以实现,解决方法,参考网页源代码的写法
|
5月前
|
JavaScript 前端开发
vue 模拟随机变速的动态打字特效【支持多行文本】(含css实现闪烁光标,js动态改变setInterval定时器的时间间隔)
vue 模拟随机变速的动态打字特效【支持多行文本】(含css实现闪烁光标,js动态改变setInterval定时器的时间间隔)
108 1
|
6月前
|
JavaScript 前端开发 Java
java 执行 javascript 代码
java 执行 javascript 代码
38 6
|
6月前
|
XML Java 数据格式
Java用xpdf库获取pdf文件的指定范围文本内容
Java用xpdf库获取pdf文件的指定范围文本内容
100 1