我创建了一个删除页面的应用程序,在该页面上我有一个像这样的脚本
<script>
var myData = { Time: '10:46:29 am', car1: 'Volvo', car2: 'Ferarri', car3: 'VW' };
<script>
使用cheerio
和request
节点模块,我得到了脚本,但我需要获取car1
,car2
和car3
的值。
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,或者有人可以解释我如何通过正则表达式获取car1
和car2
的值?
答案 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对象。