You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python/js2xml解析含反引号的JavaScript报错求助

解决js2xml解析ES6模板字符串(反引号)报错的问题

问题根源

你使用的js2xml默认依赖calmjs.parse的ES5解析器,而反引号包裹的模板字符串是ES6新增语法,ES5解析器不支持该语法规则,因此触发语法错误。单纯给calmjs的字符列表添加反引号无法解决问题,因为这涉及到词法分析器的token识别、语法分析器的语法树构建等完整逻辑,不是仅添加字符就能覆盖的。

解决方案

方案1:临时替换反引号(快速解决,适合简单场景)

如果你的JS代码里模板字符串没有用到ES6插值功能(比如${变量}),可以直接将所有反引号替换成双引号,再交给js2xml解析:

# 替换所有反引号为双引号
course_admin_js = course_admin_js.replace('`', '"')
# 执行解析
course_admin_parsed = js2xml.parse(course_admin_js)

方案2:改用ES6解析器(推荐,支持完整ES6模板字符串)

calmjs.parse本身提供了ES6解析器,你可以指定js2xml使用该解析器处理带反引号的代码:

from calmjs.parse.parsers.es6 import Parser
import js2xml

# 初始化ES6解析器实例
es6_parser = Parser()
# 调用parse时指定parser参数
course_admin_parsed = js2xml.parse(course_admin_js, parser=es6_parser)

这个方法能完整识别ES6模板字符串,包括插值语法,不会破坏原代码结构。

方案3:转译ES6到ES5(复杂场景备用)

如果上述方案不适用,可先将ES6代码转译为ES5再解析,比如用babelpy调用Babel完成转译:

from babelpy import Babel

# 初始化Babel,指定转译目标为ES5
babel = Babel(targets={"ie": "11"})
# 转译JS代码
es5_js = babel.transform(course_admin_js)
# 解析转译后的ES5代码
course_admin_parsed = js2xml.parse(es5_js)

内容的提问来源于stack exchange,提问作者MrMills

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 10:22:34