28 lines
824 B
JavaScript
28 lines
824 B
JavaScript
//@Author : dingjiawen
|
||
//@Date : 2024/03/25 15:26
|
||
//@Usage :
|
||
//@Desc :使用AST技术,还原code1.js
|
||
|
||
|
||
import {traverse, types} from "@babel/core";
|
||
import {parse} from "@babel/parser";
|
||
import CodeGenerator from "@babel/generator";
|
||
// import * as types from "@babel/types";
|
||
import fs from "fs";
|
||
|
||
|
||
const code = fs.readFileSync("code/code2.js", "utf-8");
|
||
let ast = parse(code)
|
||
|
||
traverse(ast, {
|
||
"StringLiteral"({node}) {
|
||
//这个正则表达式用于匹配字符串中是否包含\u或\x的转义序列,这两个序列分别用于Unicode和十六进制的字符转义,g表示全局,i表示不区分大小写
|
||
if (node.extra && /\\[ux]/gi.test(node.extra.raw)) {
|
||
node.extra.raw = node.extra.rawValue;
|
||
}
|
||
},
|
||
});
|
||
|
||
const {code: output} = CodeGenerator.default(ast);
|
||
console.log(output)
|