- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
parse-6ren"> parse-我有 Javascript 代码,我需要将 javascript 变量解析为 Perl 哈希。有现成的模块吗?我试过JE::parse()和 JavaScript::HashRef::Decode但都-6ren">
我有 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
最佳答案
好吧,我有好消息和坏消息,而且它们是同一个消息:)。您的 JS 有语法错误,因此 JE 根据 the JE docs 返回 undef
。具体来说,def
行缺少 ,
。以下测试对我有用:
代码:
use Data::Dumper;
# Note: use q[ ] instead of qq/ /. q instead of qq so Perl doesn't interpolate
# into the contents, and [ ] instead of / / so that JS comments can appear
# in the block.
my $str = q[
var data = {
'abc': 1,
'def' : 2, // <==== There was a comma missing here!
'xyz' : { 'foo' : 'bar' }
}
];
use JE;
my $j = new JE;
my $parsed = $j->parse($str);
warn Dumper $parsed;
输出:太大,无法在此处显示:)。但它确实包含了你想要的!
这将是一个挑战。希望以下内容能够帮助您入门。
代码:
use Data::Dumper::Compact 'ddc'; # <== for briefer output
use JE;
# Note: use q[ ] instead of qq/ /. q instead of qq so Perl doesn't interpolate
# into the contents, and [ ] instead of / / so that JS comments can appear
# in the block.
my $str = q[
var data = {
'abc': 1,
'def' : 2, // <==== There was a comma missing here!
'xyz' : { 'foo' : 'bar' }
}
];
my $j = new JE;
my $parsed = $j->parse($str);
print ddc $parsed->{tree}; # <== {tree} holds the parsed source
输出(带注释):
bless( [
[
0,
118,
],
"statements",
bless( [
[
1,
118,
],
"var",
[
"data",
bless( [
[
12,
117,
],
"hash", <== here's where your hash starts
"abc", <== 'abc': 1
1,
"def", <== 'def': 2
2,
"xyz", <== 'xyz': nested hash
bless( [
[
98,
115,
],
"hash",
"foo",
"sbar",
], 'JE::Code::Expression' ),
], 'JE::Code::Expression' ),
],
], 'JE::Code::Statement' ),
], 'JE::Code::Statement' )
关于javascript - 使用 Perl 解析 JavaScript : getting "undef" from JE->parse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56440992/
几年前,当我最初学习 Perl 时,我发现自己想说一些类似的话: sleep .07; 但这实际上行不通。 有人教我使用: select undef, undef, undef, .07; 反而。 我
undef $x is different from $x = undef .我的印象是两者都会触发垃圾收集和释放内存,但似乎 $x = undef 不会这样做。 这是语言错误吗?在执行 $x = u
我正在使用铁路 api 构建 Web 应用程序,在提交火车号时我试图显示数据但出现上述错误。实际上我在获取数据时使用了 if else 条件。 下面是代码。 import React, { Com
我在 Perl 中有以下(从错误中理想化的)简短脚本: my %metadata = undef; if (defined %metadata) { print "defined"; } 出于
Julia 中检查数组条目是否为 #undef 的最佳方法是什么? 例子: julia> a = Array(Vector,2) julia> isdefined(a[1]) # fails jul
我有一个全局扩展,它定义了一个名为“is”的方法。我遇到的问题是 ESLink 将其标记为“no-undef”;尽管它在运行时可用。 禁用规则对我来说不是一个选择。我宁愿定义它以便 ESLint 可以
在 Perl 中读取配置文件时,可能会出现某行无效且不需要将其添加到我的有效行数组中的情况。由于我在这里使用 for 循环,因此即使无效行也会创建一个 undef 条目。之后我怎样才能将它们全部删除?
有时候我想写: my $var = shift // undef; # argument is optional # or my $va
我定义了一堆宏,它们只在项目的一小部分范围内发挥作用。我想取消定义它们,这样它们就不会污染全局命名空间,但 Visual Studio 仍然会在其他文件中的#undef 之后确认它们的存在。即: //
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: undef - Why would you want to undefine a method in rub
我正在将一些参数传递给函数,其中一个可能未定义。 $a = ($config->function(param('a'),'int')); 我的模块包含一个如下所示的函数: sub function{
我在一个数组中定义了一些元素: my @arrTest; $arrTest[0]=1; $arrTest[2]=2; #Result for @arrTest is: (1, undef, 2) if
有什么办法可以从 no-undef 中排除特定模式吗?错误。我试过 'no-undef': [2, { ignoreBuiltinGlobals: ['app'] }]哪里app是由 webpack.
我使用教程来学习 React,但很快就卡住了。在教程中,他们使用了这段代码: import React, { Component } from "react"; class Counter exten
我有一个 Moose 类,它的属性起到一定的作用: has foo => (is => 'rw', does => 'Foo::Bar'); 现在我如何更改声明以允许 undef ?我试过 does
我今天似乎很傻,或者我有一个很奇怪的问题。请考虑以下代码: #!/usr/bin/perl use strict; use warnings; use warnings::unused; use wa
我是 react 新手。我的应用程序运行正常,但添加 eslint(airbnb) 后,我的应用程序无法编译。 export default class HelloWorldComponent ext
尝试编译我的应用程序时出现以下错误 - 'getRestaurants' 未定义 no-undef 我无法查明为什么没有为 zipCodeToCoords 定义 getRestaurants 我有一个
我制作了cardList,想通过 map 将卡片添加到cardlist中,但出现此错误 import React from 'react'; import Card from './Card'; co
我想在表的列中插入 null。 哪一个代表 null? undef 或空字符串 ''。 应该使用哪一个,为什么?我知道已定义并且我可以检查它。 但我更多的是从数据库的角度来看。 哪一个更恰本地表示nu
我是一名优秀的程序员,十分优秀!