如何修复正则表达式以仅从广告系列中选择base_bid - 而不是跳过我的结束字符串 - base_bid文本

How to fix regex to only select from campaign to base_bid - and not skip over my ending string - base_bid text

本文关键字:bid base 我的 文本 字符串 结束 何修复 正则表达式 系列 选择      更新时间:2023-09-26

我的正则表达式正在抓住这个:

campaign":{"id":100134,"state":"active","code":null,"advertiser_id":21147,"line_item_id":44854,"creative_id":481909,"pixel_id":null,"short_name":null,"name":"WSPA ROE 0711","profile_id":438747,"start_date":"2011-07-06 00:00:00","end_date":null,"timezone":"Europe/London","priority":5,"cadence_modifier_enabled":true,"cpc_goal":null,"cpm_bid_type":"base","base_bid":0.16,"min_bid":null,"max_bid":null,"bid_margin":0,"roadblock_creatives":false,"roadblock_type":"no_roadblock","inventory_type":"real_time","last_modified":"2014-05-28 16:06:01","max_learn_bid":null,"cadence_type":"creative","click_url":null,"require_cookie_for_tracking":true}}}{"response":{"status":"OK","count":1,"start_element":0,"num_elements":100,"campaign":{"id":12039447,"state":"active","code":null,"advertiser_id":180353,"line_item_id":2703939,"creative_id":null,"pixel_id":null,"short_name":null,"name":"Copy Jan Programmatic BAU - 6 RTG - Register 2a. (7D)","profile_id":51061721,"start_date":"2015-08-20 00:00:00","end_date":null,"timezone":"Europe/London","priority":5,"cadence_modifier_enabled":false,"cpc_goal":null,"cpm_bid_type":"base","base_bid":1.25,|100134

当我想让它抓住时:

campaign":{"id":100134,"state":"active","code":null,"advertiser_id":21147,"line_item_id":44854,"creative_id":481909,"pixel_id":null,"short_name":null,"name":"WSPA ROE 0711","profile_id":438747,"start_date":"2011-07-06 00:00:00","end_date":null,"timezone":"Europe/London","priority":5,"cadence_modifier_enabled":true,"cpc_goal":null,"cpm_bid_type":"base","base_bid":0.16,

campaign":{"id":12039447,"state":"active","code":null,"advertiser_id":180353,"line_item_id":2703939,"creative_id":null,"pixel_id":null,"short_name":null,"name":"Copy Jan Programmatic BAU - 6 RTG - Register 2a. (7D)","profile_id":51061721,"start_date":"2015-08-20 00:00:00","end_date":null,"timezone":"Europe/London","priority":5,"cadence_modifier_enabled":false,"cpc_goal":null,"cpm_bid_type":"base","base_bid":1.25,

即两批。 所以打印:

100134|0.16
12039447|1.25

我该如何解决这个问题?

这是我的文本脚本

</head>
<body>
<script>
  var theString = '{"response":{"status":"OK","count":1,"start_element":0,"num_elements":100,"campaign":{"id":100134,"state":"active","code":null,"advertiser_id":21147,"line_item_id":44854,"creative_id":481909,"pixel_id":null,"short_name":null,"name":"WSPA ROE 0711","profile_id":438747,"start_date":"2011-07-06 00:00:00","end_date":null,"timezone":"Europe/London","priority":5,"cadence_modifier_enabled":true,"cpc_goal":null,"cpm_bid_type":"base","base_bid":0.16,"min_bid":null,"max_bid":null,"bid_margin":0,"roadblock_creatives":false,"roadblock_type":"no_roadblock","inventory_type":"real_time","last_modified":"2014-05-28 16:06:01","max_learn_bid":null,"cadence_type":"creative","click_url":null,"require_cookie_for_tracking":true}}}{"response":{"status":"OK","count":1,"start_element":0,"num_elements":100,"campaign":{"id":12039447,"state":"active","code":null,"advertiser_id":180353,"line_item_id":2703939,"creative_id":null,"pixel_id":null,"short_name":null,"name":"Copy Jan Programmatic BAU - 6 RTG - Register 2a. (7D)","profile_id":51061721,"start_date":"2015-08-20 00:00:00","end_date":null,"timezone":"Europe/London","priority":5,"cadence_modifier_enabled":false,"cpc_goal":null,"cpm_bid_type":"base","base_bid":1.25,"min_bid":null,"max_bid":null,"bid_margin":0,"roadblock_creatives":false,"roadblock_type":"no_roadblock","inventory_type":"real_time","last_modified":"2016-02-09 12:11:02","max_learn_bid":null,"cadence_type":"advertiser","click_url":null,"require_cookie_for_tracking":true}}}';
var regexp = /campaign":{"id":([0-9]+),"state":.*"base_bid":([0-9.]+),/g;
var match = regexp.exec(theString);
while (match != null){
    console.log(match[0] + '|' + match[1]);
    var match = regexp.exec(theString);
}
</script>
</body>
<html>

我认为该正则表达式的问题在于"base_bid"之前的.*匹配第一个"id"和最后一个"base_bid"之间的所有内容。我不确定如何修复正则表达式。

但是,你用过JSON.parse吗?它内置于Javascript中,并将有效的JSON字符串转换为javascript对象。如果您能够将jsonString拆分为单独的响应,则可以非常简单地获得广告系列 ID 和基本出价值。

这不是一个完美的解决方案,但我会尝试在这里说明我的想法:

// Your original string.
var jsonString = '{"response":{"status":"OK","count":1,"start_element":0,"num_elements":100,"campaign":{"id":100134,"state":"active","code":null,"advertiser_id":21147,"line_item_id":44854,"creative_id":481909,"pixel_id":null,"short_name":null,"name":"WSPA ROE 0711","profile_id":438747,"start_date":"2011-07-06 00:00:00","end_date":null,"timezone":"Europe/London","priority":5,"cadence_modifier_enabled":true,"cpc_goal":null,"cpm_bid_type":"base","base_bid":0.16,"min_bid":null,"max_bid":null,"bid_margin":0,"roadblock_creatives":false,"roadblock_type":"no_roadblock","inventory_type":"real_time","last_modified":"2014-05-28 16:06:01","max_learn_bid":null,"cadence_type":"creative","click_url":null,"require_cookie_for_tracking":true}}}{"response":{"status":"OK","count":1,"start_element":0,"num_elements":100,"campaign":{"id":12039447,"state":"active","code":null,"advertiser_id":180353,"line_item_id":2703939,"creative_id":null,"pixel_id":null,"short_name":null,"name":"Copy Jan Programmatic BAU - 6 RTG - Register 2a. (7D)","profile_id":51061721,"start_date":"2015-08-20 00:00:00","end_date":null,"timezone":"Europe/London","priority":5,"cadence_modifier_enabled":false,"cpc_goal":null,"cpm_bid_type":"base","base_bid":1.25,"min_bid":null,"max_bid":null,"bid_margin":0,"roadblock_creatives":false,"roadblock_type":"no_roadblock","inventory_type":"real_time","last_modified":"2016-02-09 12:11:02","max_learn_bid":null,"cadence_type":"advertiser","click_url":null,"require_cookie_for_tracking":true}}}';
// Find where the first response ends and the second begins.
// (+ 1 because we need to get between the }{ when we split.)
// (It would be great if the strings weren't concatenated to begin with.)
var splitIndex = jsonString.indexOf('}{') + 1;
// Get the two individual JSON responses.
var firstResponseJson = jsonString.substring(0, splitIndex);
var secondResponseJson = jsonString.substring(splitIndex);
// Parse the first JSON string.
var firstResponse = JSON.parse(firstResponseJson);
// We now have an Object with a "response" attribute, which contains
// all the information we need about this campaign.
var firstId = firstResponse.response.campaign.id;
var firstBaseBid = firstResponse.response.campaign.base_bid;
console.log(firstId + '|' + firstBaseBid);

很抱歉没有使用正则表达式的答案,但我认为如果您能够将该 JSON 解析为对象,它最终将是一个更灵活的解决方案。