import re
regex = re.compile(r"Hub\.config\.set\('\w*',\s*({[\s\S]*})", flags=re.MULTILINE)
test_str = ("Hub = {};\n"
"Hub.config = {\n"
" config: {},\n"
" get: function(key) {\n"
" if (key in this.config) {\n"
" return this.config[key];\n"
" } else {\n"
" return null;\n"
" }\n"
" },\n"
" set: function(key, val) {\n"
" this.config[key] = val;\n"
" }\n"
"};\n\n"
"Hub.config.set('sku', {\n"
" valCartInfo : {\n"
" itemId : '576938415361',\n"
" cartUrl: '//cart.mangolane.com/cart.htm'\n"
" },\n"
" apiRelateMarket : '//tui.mangolane.com/recommend?appid=16&count=4&itemid=576938415361',\n"
" apiAddCart : '//cart.mangolane.com/add_cart_item.htm?item_id=576938415361',\n"
" apiInsurance : '',\n"
" wholeSibUrl : '//detailskip.mangolane.com/service/getData/1/p1/item/detail/sib.htm?itemId=576938415361&sellerId=499095250&modules=dynStock,qrcode,viewer,price,duty,xmpPromotion,delivery,upp,activity,fqg,zjys,amountRestriction,couponActivity,soldQuantity,page,originalPrice,tradeContract',\n"
" areaLimit : '',\n"
" bigGroupUrl : '',\n"
" valPostFee : '',\n"
" coupon : {\n"
" couponApi : '//detailskip.mangolane.com/json/activity.htm?itemId=576938415361&sellerId=499095250',\n"
" couponWidgetDomain: '//assets.mgcdn.com',\n"
" cbUrl : '/cross.htm?type=weibo'\n"
" },\n"
" valItemInfo : {\n\n"
" defSelected: -1,\n"
" skuMap : {\";20549:103189693;1627207:811754571;\":{\"price\":\"528.00\",\"stock\":\"2\",\"skuId\":\"4301611864655\",\"oversold\":false},\n"
" \";20549:59280855;1627207:412796441;\":{\"price\":\"528.00\",\"stock\":\"2\",\"skuId\":\"4432149803707\",\"oversold\":false},\n"
" \";20549:59280855;1627207:196576508;\":{\"price\":\"528.00\",\"stock\":\"2\",\"skuId\":\"4018119863100\",\"oversold\":false},\n"
" \";20549:72380707;1627207:28341;\":{\"price\":\"528.00\",\"stock\":\"2\",\"skuId\":\"4166690818570\",\"oversold\":false},\n"
" \";20549:418624880;1627207:28341;\":{\"price\":\"528.00\",\"stock\":\"2\",\"skuId\":\"4166690818566\",\"oversold\":false},\n"
" \";20549:418624880;1627207:196576508;\":{\"price\":\"528.00\",\"stock\":\"2\",\"skuId\":\"4018119863098\",\"oversold\":false},\n"
" \";20549:72380707;1627207:3224419;\":{\"price\":\"528.00\",\"stock\":\"2\",\"skuId\":\"4166690818571\",\"oversold\":false},\n"
" \";20549:147478970;1627207:196576508;\":{\"price\":\"528.00\",\"stock\":\"2\",\"skuId\":\"4018119863094\",\"oversold\":false},\n"
" \";20549:72380707;1627207:384366805;\":{\"price\":\"528.00\",\"stock\":\"2\",\"skuId\":\"4432149803708\",\"oversold\":false},\n"
" \";20549:296172561;1627207:811754571;\":{\"price\":\"528.00\",\"stock\":\"2\",\"skuId\":\"4301611864659\",\"oversold\":false},\n"
" \";20549:72380707;1627207:1150336209;\":{\"price\":\"528.00\",\"stock\":\"2\",\"skuId\":\"4301611864664\",\"oversold\":false},\n"
" \";20549:147478970;1627207:93586002;\":{\"price\":\"528.00\",\"stock\":\"2\",\"skuId\":\"4018119863095\",\"oversold\":false}}\n"
" ,propertyMemoMap: {\"1627207:811754571\":\"黑色单里(预售) 年后2.29发货\",\"1627207:93586002\":\"黑色加绒 现货\",\"1627207:412796441\":\"黑色(兔毛) 现货\",\"1627207:384366805\":\"米白色(兔毛) 现货\",\"1627207:3224419\":\"驼色 现货\",\"1627207:1150336209\":\"驼色单里(预售) 年后2.29发货\",\"1627207:28341\":\"黑色 现货\",\"1627207:196576508\":\"驼色加绒 现货\"}\n\n\n"
" }\n"
"});")
matches = regex.finditer(test_str)
for match_num, match in enumerate(matches, start=1):
print(f"Match {match_num} was found at {match.start()}-{match.end()}: {match.group()}")
for group_num, group in enumerate(match.groups(), start=1):
print(f"Group {group_num} found at {match.start(group_num)}-{match.end(group_num)}: {group}")
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Python, please visit: https://docs.python.org/3/library/re.html