NodeJS和Cheerio网络报废

时间:2016-01-15 15:36:14

标签: javascript regex node.js string

我创建了一个删除页面的应用程序,在该页面上我有一个像这样的脚本

<script>
var myData = { Time: '10:46:29 am', car1: 'Volvo', car2: 'Ferarri', car3: 'VW' };
<script>

使用cheeriorequest节点模块,我得到了脚本,但我需要获取car1car2car3的值。

request('http://my-url.com', function(error, response, body) {

    var $ = cheerio.load(body);

    var htmlData = $('body script').last().prev().html();
    console.log(data);  

});

我尝试使用JSON.parse(htmlData)但我收到以下错误SyntaxError: Unexpected token T

有没有办法解析脚本中的javascript,或者有人可以解释我如何通过正则表达式获取car1car2的值?

1 个答案:

答案 0 :(得分:3)

我建议做一系列字符串替换,然后执行JSON.load,以获取JavaScript对象,就像这样

var data = "{ Time: '10:46:29 am', car1: 'Volvo', car2: 'Ferarri', car3: 'VW' };";
var obj = JSON.parse(data
  .replace(/((?:[A-Za-z_][\w\d])+):/g, '"$1":')
  .replace(/'/g, '"')
  .replace(/;\s*$/, ''));
console.log(obj.car1, obj.car2, obj.car3);
// Volvo Ferarri VW

在这里,

.replace(/((?:[A-Za-z_][\w\d])+):/g, '"$1":')

(?:[A-Za-z_][\w\d])+形式的所有匹配字符串替换为"所包含的相同匹配字符串,后跟:"$1":

然后

.replace(/'/g, '"')

会将所有'替换为"(假设您的数据中不包含')。

然后

.replace(/;\s*$/, '')

将在末尾替换;后跟空格字符,使用空字符串(基本上我们将其删除)。

此时,字符串将如下所示

{ "Time": "Friday", "car1": "Volvo", "car2": "Ferarri", "car3": "VW" }

现在我们只需将其解析为JSON字符串,并使用JSON.parse来获取JavaScript对象。