Javascript正则表达式与html中的json匹配
我正在编写一个chrome扩展,其中有一个函数可以解析来自另一个网站的html数据。我需要解析javascript标记中的两个Json字符串,如下所示,我想使用正则表达式分别捕获它们。我成功地用以下正则表达式捕获了第二部分:Javascript正则表达式与html中的json匹配,javascript,json,regex,Javascript,Json,Regex,我正在编写一个chrome扩展,其中有一个函数可以解析来自另一个网站的html数据。我需要解析javascript标记中的两个Json字符串,如下所示,我想使用正则表达式分别捕获它们。我成功地用以下正则表达式捕获了第二部分: /iDetailData\s+=\s+({[^]+});/g 但第一部分似乎更难,因为它只能匹配到csrf令牌的末尾,而它期望匹配到};。我使用了以下正则表达式来捕获第一个json部分: /iDetailConfig\s+=\s+([^}]+)/g 如果你对这个案子有经
/iDetailData\s+=\s+({[^]+});/g
但第一部分似乎更难,因为它只能匹配到csrf令牌的末尾,而它期望匹配到};。我使用了以下正则表达式来捕获第一个json部分:
/iDetailConfig\s+=\s+([^}]+)/g
如果你对这个案子有经验的话,你能帮我一下吗
<script type="text/javascript">
var iDetailConfig = {
'pageType': '',
'pageid': 'laputa20150511141457',
'offerid': '528011005304',
'catid': '122238002',
'dcatid': '53486008',
'parentdcatid': '54546001',
'isRangePriceSku': 'true',
'isSKUOffer': 'true',
'memberid': 'b2b-275072844861040',
'loginId': '淘淘羊供应链',
'islogin': 'false',
'buyerUserID': '',
'isTP': 'true',
'isSlsjSeller': 'false',
'loginurl': '',
'topDomainTpl': '',
'unit': '个',
'priceUnit': '元',
'isPreview': 'false',
'isVirtualCat': 'false',
'isLadderGroup': '',
'refPrice': '339.00',
'beginAmount': '1',
'mergeVariable': 'asyncResourcesAliimg',
'currentTime': '1488967781423',
'isAccessSpecialSuppy': 'true',
'domainType': '',
'sourceType': 'freebuynowoffer',
'hasConsignPrice': 'false',
'mkcActivityId': '',
'mkcActivityStartTime': '',
'qrcode': 'https://gqrcode.alicdn.com/img?type=ali&w=150&h=150&el=m&text=http%3A%2F%2Fma.m.1688.com%2Frush.html%3Fsecret%3D8mNOFtQd',
'minqrcode': 'https://gqrcode.alicdn.com/img?type=ali&w=46&h=46&el=m&text=http%3A%2F%2Fma.m.1688.com%2Frush.html%3Fsecret%3D8mNOFtQd',
'officialActivityId': '',
'userId': '2750728448',
'end': 0,
'_csrf_token': '9274f530e426ddb9af2d0f254d464fce'
};
var iDetailData = {
"sku": {
"price": "",
"retailPrice": "",
"canBookCount": "274",
"saleCount": "45",
"priceRange": [
[1, 339.00],
[2, 269.00]
],
"priceRangeOriginal": [
[1, 339.00],
[2, 269.00]
],
"skuProps": [{
"value": [{
"name": "黄白色(大象长颈鹿款))"
}, {
"name": "米白色(小羊小鸭款)"
}, {
"name": "蓝色(小牛小马款)"
}, {
"name": "粉色"
}],
"prop": "颜色"
}, {
"value": [{
"name": "50*30*7/9cm"
}],
"prop": "尺寸规格"
}],
"skuMap": {
"米白色(小羊小鸭款)>50*30*7/9cm": {
"canBookCount": 174,
"skuId": 3201563335895,
"specId": "7f68748bd9b704fa9708242ec570aa33",
"saleCount": 3
},
"蓝色(小牛小马款)>50*30*7/9cm": {
"canBookCount": 44,
"skuId": 3201563335894,
"specId": "57e90efbfac8e7b69e73108a07d6198f",
"saleCount": 10
},
"黄白色(大象长颈鹿款))>50*30*7/9cm": {
"canBookCount": 7,
"skuId": 3201563335893,
"specId": "3c4e75dbf21e70d5cea3dcb033bf0a9c",
"saleCount": 7
},
"粉色>50*30*7/9cm": {
"canBookCount": 49,
"skuId": 3201563335896,
"specId": "5139112038a0bdef1f3d48e035448d48",
"saleCount": 6
}
},
"end": 0
}
};
iDetailData.allTagIds = [];
iDetailData.isSourcePromotion = false
iDetailData.hasPurcharseMark = false
</script>
如果希望捕获包含};,试试这个:
/iDetailConfig\s+=\s+([^}]+});/g
抱歉,这些JSON字符串在哪里?@Phil您可以看到它被定义为变量:var iDetailConfig和var iDetailDataI我不理解您的问题。你到底想干什么?你已经有了对象iDetailConfig和iDetailData.Oops,这是我的不好没有解释好。我正在编写一个chrome扩展,其中有一个函数可以解析来自另一个网站的html数据。因为这是我要解析的网站的html代码,所以它不是我的!天啊,你帮我省了几个小时的时间。没注意到我漏掉了那个逗号,谢谢!