正则表达式在测试中获得一些JSON

时间:2014-08-09 23:55:51

标签: javascript regex node.js

我有一些以这种方式格式化的文本:

var string = 'some random text fjijd {"Type":"NewTunnel","Payload":{"ReqId":"e425ebb50d220816","Url":"asaa","Protocol":"http","Error":""}} some other text bla bla'

我想知道如何提取可以使用正则表达式解析的json字符串化对象。

更新

我正在使用spawn从node.js应用程序运行子进程,并以这种方式格式化的纯文本中运行stdout数据(即应用程序日志-log=stdout)。不要问我怎么样,为什么,抱歉!

var cproc = require("child_process");
proc = cproc.spawn("./ngrok", ['-log=stdout', '8080']);
proc.stdout.on("data", function(res) {
  console.log("Data received: " + res);
});

收到的数据是纯文本,如下所示:

[08/10/14 01:49:37] [DEBG] [ctl:604a481c] Read message {"Type":"ReqProxy","Payload":{}}

它还包括调试信息!

2 个答案:

答案 0 :(得分:3)

上次更新:又一个解决方案

/((?:{).*(?:}))/g

最初的答案:

这个怎么样?我相信你只需要这个字符串中的JSON部分。如果您不希望嵌套对象,则可以将模式更改为/({.*?})/g

var s = 'some random text fjijd {"Type":"NewTunnel","Payload":{"ReqId":"e425ebb50d220816","Url":"asaa","Protocol":"http","Error":""}} some other text bla bla';
var m = s.match(/({.*})/g);  // or /({+.*}+)/g  or /(({+).*(}+))/g
console.log(m[0]);

输出:

{"Type":"NewTunnel","Payload":{"ReqId":"e425ebb50d220816","Url":"asaa","Protocol":"http","Error":""}}

Demo1 | Demo2

答案 1 :(得分:2)

您可以使用此正则表达式:

({.*})

<强> Working demo

enter image description here