2016-01-15 37 views
2

我做了,我放弃一个页面的应用程序,该网页上我有这样的NodeJS和Cheerio网络再杀

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

随着cheeriorequest节点模块我拿到剧本的脚本,但我需要得到car1,car2car3的值。

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的值吗?

回答

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对象。

+0

感谢您的支持!我在替换所有东西之后只有一个问题,现在我的时间看起来像这个“时间”:“”10“:”43“:31 am”,我想因为你匹配了字符串和:,我该如何修复它? – Hiero

+0

@Hiero等等,你的问题没有显示时间部分 – thefourtheye

+0

是的,对不起,我的时间看起来像是时间:'10:46:29 am' – Hiero