Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js虚拟机和字符串连接_Javascript_Regex_Node.js_Express - Fatal编程技术网

Javascript Node.js虚拟机和字符串连接

Javascript Node.js虚拟机和字符串连接,javascript,regex,node.js,express,Javascript,Regex,Node.js,Express,我有一个动态生成的HTML文件,只有一个javascript对象被注释掉。我正在尝试读取该文件,将对象作为字符串取出,并使用VM的runInNewContext()运行它。但我遇到了一些障碍 这是我的密码: 我必须阅读的文件: /* { "userId": ["2897599"], "addressId": ["1287124"] } */ 我正在尝试使用的代码: var startDataMap = body.indexOf('{') , endDataMap = body.

我有一个动态生成的HTML文件,只有一个javascript对象被注释掉。我正在尝试读取该文件,将对象作为字符串取出,并使用VM的
runInNewContext()
运行它。但我遇到了一些障碍

这是我的密码:

我必须阅读的文件:

/*
{
  "userId": ["2897599"],
  "addressId": ["1287124"]
}
*/
我正在尝试使用的代码:

var startDataMap = body.indexOf('{')
    , endDataMap = body.indexOf('}')
    , dataMap    = body.substring(startDataMap, endDataMap);

  var sandbox = {};
  try { 
    vm.runInNewContext(dataMap, sandbox) 
  } catch (error) { 
      console.log(error) 
  };
如果我运行此命令,将返回以下错误:
[语法错误:意外标记:

如果我用正则表达式(即用
(/\{/)
而不是
('{')
)运行它,它将执行时不会出错,但不会捕获数据

问题:为什么这两种尝试都不起作用?如何使用VM获取所需数据?


更新:

我采纳了下面答案的建议,删除了错误并添加了一两个调整。以下是更新的代码:

var startDataMap = body.indexOf('{')
    , endDataMap = body.indexOf('*/', startDataMap)
    , dataMap    = body.substring(startDataMap, endDataMap);

  var sandbox = {};
  try { 
    vm.runInNewContext( '(' + dataMap + ')', sandbox) 
  } catch (error) { 
      console.log(error) 
  };

它删除了错误,但沙盒仍然是空的。我检查了数据映射,它确实有所需的数据,但结尾有一行空白。这会导致VM关闭吗?如果是,我如何摆脱它,或者我需要更改我的数据映射吗?

您可能需要添加括号,以便字符串为I被解释为对象而不是块:

vm.runInNewContext("(" + dataMap + ")", sandbox)

不在表达式中的大括号被视为块。通过将代码放在括号内,可以清楚地表明代码应该是对象文字,而不是块。

奇怪。从来没有人知道这一点。因此修复了错误。但是我在
沙盒中仍然没有任何代码。我检查了
数据映射中得到的内容>这是正确的数据,但结尾有空格。这会影响到事情吗?如果是,我怎么能摆脱它?我会更新代码,以显示我做的细微调整。我意识到我只是在处理一个简单的对象,所以我只切换到了
JSON。parse
工作得很好。我仍然很好奇为什么它不工作。