node子进程返回数据带ANSI编码处理
时间:2020-03-08
本文章向大家介绍node子进程返回数据带ANSI编码处理,主要包括node子进程返回数据带ANSI编码处理使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
node子进程返回数据带ANSI编码
什么是ANSI?
这里得说明下ANSI在终端内的作用,ANSI转义序列是一种带内信号的转义序列标准,用于控制视频文本终端上的光标位置、颜色和其他选项。在文本中嵌入确定的字节序列,大部分以ESC转义字符和"["字符开始,终端会把这些字节序列解释为相应的指令,而不是普通的字符编码。
就是说node输出给我们的字符串本来是要在终端内展示的,而且这里是带格式的,例如错误的标红,换行,清屏等等。下面就是带ANSI的字符串:
这里有用的信息其实只有
File "test.py", line 2
pythonEditor.vue?aa11:652
SyntaxError: invalid syntax
里有一些奇怪字符·[2等等,这些就是ASNI的控制字符
这里的点就是ESC的意思,其中我发现有一个是ESC]的奇怪字符,这里的中括号和其它事反的,通过终端发现ESC]后面的字符到下个控制命令之间的字符都会被忽略。就是“C:\Users\admin\AppData\Local\Programs\codesprite-test\resources\app\dist\electron\static\Python3\python.exe”这段是不需要的。
知道了这些我们就可以进行处理了,先找到获取ANSI的正则。
const ansiRegex = ({onlyFirst = false} = {}) => {
const pattern = [
'[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
'(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
].join('|');
return new RegExp(pattern, onlyFirst ? undefined : 'g');
}
通过正则可以将字符内所有ANSI字符匹配出来,然后将其删除,再特殊处理ESC]后面的字符串
function filter (text) {
const arr = text.match(ansiRegex())
arr.forEach((ele, idx) => {
if (ele.includes(']')) {
const _idx = text.indexOf(ele)
if (idx !== arr.length - 1) {
const next = arr[idx + 1]
const _idx2 = text.indexOf(next) + next.length
const as=text.slice(_idx, _idx2)
text = text.replace(as, '')
} else {
const as = text.slice(_idx, text.length - 1)
text = text.replace(as, '')
}
}
text = text.replace(ele, '')
})
return text
}
这个就是简单的处理ansi字符的方法了。
原文地址:https://www.cnblogs.com/suyuanli/p/12442534.html
- 用了Docker,妈妈再也不担心我的软件安装了 - 基础篇
- 适配器模式(Adapter)
- 敞开的地狱之门:Kerberos协议的滥用
- CY7C68013A的一点总结
- RxJava2 实战(1) - 后台执行耗时操作,实时通知 UI 更新
- AutoIt木马又一发:暗藏神秘照片
- css3动画从入门到精通
- ReactJs和React Native的那些事
- Linux学习-文件排序和FASTA文件操作
- Bash漏洞再次演进:缓冲区溢出导致远程任意命令执行
- Pandas,让Python像R一样处理数据,但快
- ViewPager 实现 Galler 效果, 中间大图显示,两边小图展示
- 最小生成树-Prim算法和Kruskal算法
- Bash漏洞批量检测工具与修复方案
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【webpack】从vue-cli 2x 到 3x 迁移与实践
- 前端单元测试那些事
- 前端Nginx那些事
- 前端运维部署那些事
- 《前端那些事》从0到1开发简单脚手架
- CDH7.1.1启用Kerberos
- 持续代码质量管理-SonarQube Scanner部署 2.1. 软件安装2.2. 配置修改
- 《前端那些事》聊聊前端的按需加载
- 直播带货系统,滚动视图,上滑隐藏,下滑显示
- 持续代码质量管理-SonarQube-7.3简单使用 2.1. 查看配置2.2. 质量检测2.3. 浏览器查看
- 安装指定版本的docker服务
- 你学BFF和Serverless了吗
- 如何使用Java连接Kerberos的Phoenix
- docker swarm的常用操作
- 组件库源码中这些写法你掌握了吗?