更改 javascript 文件中的硬编码 ID

我必须解析 javascript 文件并在每次调用特定函数时替换最后一个函数参数。我有一组提供新 ID 的替换值。


JavaScript 代码:


// every time this function is called I need to replace change_id with different value from array

function submitData(element_id, url, change_id) {...

    ...

}


... 


// I want to replace 3, 2 and 4 with values from my array

// 3,2,4 are just used for example, values are dynamic

window.addEventListener('beforeunload', function (e) { submitData(1, "http://mysite/metrics, 3");}); window.addEventListener('beforeunload', function (e) { submitData(1, "http://mysite/metrics, 2");}); window.addEventListener('beforeunload', function (e) { submitData(1, "http://mysite/metrics, 4");});

我有一个 ids 数组,我想循环遍历它们,并将每个函数调用中的值替换为该数组中的值之一


我的阵列:


$change_ids = [10,15,20];

所以结果应该是:


window.addEventListener('beforeunload', function (e) { submitData(1, "http://mysite/metrics, 10");}); window.addEventListener('beforeunload', function (e) { submitData(1, "http://mysite/metrics, 15");}); window.addEventListener('beforeunload', function (e) { submitData(1, "http://mysite/metrics, 20");});

只有函数调用中的第三个参数需要更改,所以我考虑使用这样的东西(在这里找到):


$search = "/[^metrics,](.*)[^\"\)]/";

$replace = "10";

$string = file_get_contents($pathToJsFile);

echo preg_replace($search,$replace,$string);

但问题是$change_id每次函数调用都会相等


杨__羊羊
浏览 166回答 2
2回答

Smart猫小萌

您可以通过将 javascript 字符串转换为带有占位符的“模板”来避免本机函数调用%d,然后只需将新 id 注入到这些占位符中vsprintf()(我将用 进行演示vprintf(),以便将字符串打印到屏幕上)。代码:(演示)$string = <<<JSfunction submitData(element_id, url, change_id) {...&nbsp; &nbsp; ...}...&nbsp;window.addEventListener('beforeunload', function (e) { submitData(1, "http://mysite/metrics, 3");}); window.addEventListener('beforeunload', function (e) { submitData(1, "http://mysite/metrics, 2");}); window.addEventListener('beforeunload', function (e) { submitData(1, "http://mysite/metrics, 4");});JS;$change_ids = [19, 7, 11];vprintf(&nbsp; &nbsp; preg_replace('~metrics,\s*\K\d+~', '%d', $string),&nbsp; &nbsp; $change_ids);

POPMUISE

我最终得到了这个解决方案:$javascript = file_get_contents($path);if (empty($javascript)) {&nbsp; &nbsp;return false;}$search = '/(?<=metrics\",)\s*.*?(?=\))/';&nbsp;此模式将从该字符串返回“1”(空格 1):window.addEventListener('beforeunload', function (e) { SubmitData(1, "http://mysite/metrics", 1 );});之后,我用数组中的值替换匹配项。$javascript = preg_replace_callback($search,function($m) use (&$change_ids) {&nbsp;&nbsp;&nbsp; &nbsp; $m = $m[key($m)];&nbsp; &nbsp; $m = ' '. array_shift($change_ids);&nbsp; &nbsp; return $m;},$javascript);&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;return file_put_contents($path, $javascript);
打开App,查看更多内容
随时随地看视频慕课网APP