【发布时间】:2019-10-19 19:31:07
【问题描述】:
我有 Javascript 代码,我需要将 javascript 变量解析为 perl 哈希。有没有现成的模块?我尝试了JE::parse() 和JavaScript::HashRef::Decode,但都没有成功。
预期行为:
use Data::Dumper;
use SomeModule::ParseJSVariables qw/decode_js/;
my $str = qq/
var data = {
'abc': 1,
'def' : 2
'xyz' : { 'foo' : 'bar' }
}
/;
my $res = decode_js($str);
warn Dumper $res; #
# expected result:
# {
# name => 'data',
# value => {
# 'abc' => 1,
# 'def' => 2
# 'xyz' => { 'foo' => 'bar' }
# }
# }
use JE;
my $j = new JE;
my $parsed = $j->parse($str);
warn Dumper $parsed; # undef :(
如果没有现成的模块,如果有人建议正确的正则表达式或解析方法,我会很高兴。
UPD,澄清。我有大约数千行 javascript 代码,我只需要获取在全局范围内明确给出的变量内容,例如 var x = { 'foo' : 'bar' }。其他代码可以跳过解析。
我的环境:
$ perl --version
This is perl 5, version 22, subversion 1 (v5.22.1) built for x86_64-linux-gnu-thread-multi
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.5 LTS
Release: 16.04
Codename: xenial
$ uname -r
4.19.24-041924-generic
【问题讨论】:
-
关于第 3 方代码或场外资源的问题不在 Stack Overflow 上的主题范围内。检查Where can I ask about “finding a tool, library, or favorite off-site resource?”
-
您能提供更多上下文/输入示例吗?您是否只需要解析(可能稍微放松)JSON 或完整的 Javascript 代码(带有循环和函数等等)?
-
不清楚您要达到的目标。例如,当给定代码
let a = console.log("hi"), b = a, c = { foo: function (i) { return function () { return i++; }; }(0) }; { let b = 42; console.log(Math.sqrt(b)); }时,decode_js会返回什么? -
为什么
JE::parse不起作用? -
@Thilo 首先我无法安装 JE::parse 而不跳过测试。即使我跳过测试并安装它,我也会得到
undef作为结果
标签: javascript perl parsing static-code-analysis