You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何改进基于indexOf提取子串的方法,避免硬编码偏移量导致提取错误

优化实现方案

以下是两种可替代硬编码偏移的可靠方案,优先推荐第二种:

方案1:正则匹配提取(无需硬编码偏移)

直接匹配timestamp字段后跟随的标准时间格式内容,不需要计算任何位置偏移:

// 匹配规则:匹配timestamp字段后双引号包裹的标准时间内容
const timeReg = /"timestamp":"(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})"/;
const matchResult = TextScript.match(timeReg);
if (matchResult) {
  const targetTime = matchResult[1];
  sheet.getRange(1, 1).setValue(targetTime);
}

该方案只要timestamp字段名和时间格式不变,就不会出错,容错率远高于硬编码偏移。

方案2:提取JSON结构解析(最稳定,优先选择)

你采集到的脚本内容里,HomeMatchesBlock的第三个入参是标准JSON格式,直接提取这段JSON解析后读取属性即可,完全规避位置偏移问题,即使后续其他字段增减、位置变化,只要timestamp字段还在这个JSON结构里就不会出错。
优化后完整代码如下:

function Clock() {
  var sheet = SpreadsheetApp.getActive().getSheetByName('Clock');
  var url = 'https://int.soccerway.com/';
  const contentText = UrlFetchApp.fetch(url).getContentText();
  const $ = Cheerio.load(contentText);
  const Before = '"timestamp":"';
  var ElementSelect = $('script:contains(' + Before + ')');
  var TextScript = ElementSelect.html();

  // 提取HomeMatchesBlock的第三个参数JSON段
  const jsonReg = /new HomeMatchesBlock\([^,]+,[^,]+,(\{.*?\})\)/;
  const jsonMatch = TextScript.match(jsonReg);
  if (jsonMatch) {
    const config = JSON.parse(jsonMatch[1]);
    const targetTime = config.timestamp;
    sheet.getRange(1, 1).setValue(targetTime);
  }
}

内容的提问来源于stack exchange,提问作者Digital Farmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 21:54:04