2016-01-15 32 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