【问题标题】:Googles Apps Script exact matchGoogle Apps 脚本完全匹配
【发布时间】:2019-07-03 05:53:00
【问题描述】:

我正在使用这个脚本,但它正在替换 T、A 等的每个实例。我如何让它只替换完全匹配?只有当它是字母 T 而不是别的时。

function runReplaceInSheet(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Underlevel");
  //  get the current data range values as an array
  //  Fewer calls to access the sheet -> lower overhead 
  var values = sheet.getDataRange().getValues();  

  // Replace
  replaceInSheet(values, "/^T$/", '=image("https://i.imgur.com/Dxl893F.png")');
  replaceInSheet(values, 'A', '=image("https://i.imgur.com/omc7F9l.png")');
  replaceInSheet(values, 'R', '=image("https://i.imgur.com/12ZmSp3.png")');
  replaceInSheet(values, 'M', '=image("https://i.imgur.com/kh7RqBD.png")');
  replaceInSheet(values, 'H', '=image("https://i.imgur.com/u0O7fsS.png")');
  replaceInSheet(values, 'F', '=image("https://i.imgur.com/Hbs3TuP.png")');

  // Write all updated values to the sheet, at once
  sheet.getDataRange().setValues(values);
}

function replaceInSheet(values, to_replace, replace_with) {
  //loop over the rows in the array
  for(var row in values){
    //use Array.map to execute a replace call on each of the cells in the row.
    var replaced_values = values[row].map(function(original_value) {
      return original_value.toString().replace(to_replace,replace_with);
    });

    //replace the original row values with the replaced values
    values[row] = replaced_values;
  }
}

谢谢你:D

【问题讨论】:

  • 您使用了除 Google-apps-script 标签之外的所有其他标签

标签: javascript regex google-apps-script google-sheets


【解决方案1】:

问题:

  • String 类型而不是 Regex 对象:您将 String 作为第一个参数提供给 String#replace(),并期望执行 regex 类型。 "/^T$/" 将被解释为以/ 开头、包含^T$ 并以/ 结尾的字符串文字。

解决方案:

  • 未引用的正则表达式: 正则表达式文字不应使用" 引用。

片段#1:

/^T$/    //or new RegExp('^T$')

片段#2:

您也可以直接将.replace() 与替换函数一起使用。

var range = sheet.getDataRange();
var replaceObj = {
  //to_replace: imgur id
  T: 'Dxl893F',
  A: 'omc7F9l',
};
var regex = new RegExp('^(' + Object.keys(replaceObj).join('|') + ')$', 'g');// /^(T|A)$/
function replacer(match) {
  return '=image("https://i.imgur.com/' + replaceObj[match] + '.png")';
}
range.setValues(
  range.getValues().map(function(row) {
    return row.map(function(original_value) {
      return original_value.toString().replace(regex, replacer);
    });
  })
);

参考资料:

【讨论】:

  • 谢谢 :D 两种解决方案都有效,但我现在遇到的问题是,当输入多个字符串时,它会删除前一个。所以我输入一个 T 和一个 R,例如,它会找到并替换 T,然后删除它并替换 R。这是谷歌表格的东西还是代码?
  • @Ryan TR 在一个单元格中?就像TR 一样,它输出R?
  • 不,抱歉,不同的单元格。它将替换 T,删除它,然后用其中的 R 替换不同的单元格。我一直在玩弄它,将随机的 T、A、R 放在整个工作表上并分组。一次一个,也可以输入几个。随着新字符串的替换,所有先前替换的字符串都会消失并重新出现。但随后它们不会再出现。即使在做一个新的单元格之间等待,它仍然会删除以前的单元格。希望这是有道理的! @TheMaster
  • 我想我应该注意,目的是在同一张纸上多次使用这个脚本。不确定这是否会改变任何东西。不过,可能值得一提的是,我看到的一些用于查找和替换的脚本本来是打算在看起来像的时候使用的。 @TheMaster
  • 以前替换的公式=image() 被删除,因为当您getValue() 时,带有图像公式的单元格中的值是空的。您的值数组应该是公式和值的组合,请参阅here 了解如何执行此操作。如果您有问题,请提出一个包含足够详细信息的新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-30
  • 2021-12-16
  • 1970-01-01
  • 2017-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多