在 Google Docs App 脚本中循环查找和替换

Find and Replace in a loop in Google Docs App Script

我经常撰写研究论文,要求在文中引用括号中的数字 - 例如:“这是引述 [1]”。

在我写论文时,我使用字母而不是数字,这样我可以稍后查找和替换,因为我可能会在这里和那里添加引文,我不想为每个引文重新编号保持秩序。

如何循环搜索整个 Google 文档,并用数字替换每个字母?例如。将 [a] 替换为 [1],将 [b] 替换为 [2] 等。我尝试了这段代码,但它用括号中的随机数替换了文档中的每个字符。我不清楚转义括号的规则,所以我也在每个括号前用 \ 尝试过这个:

function myFunction() {

    var doc = DocumentApp.getActiveDocument();
    body = doc.getBody();

     var alphabet = ["[a]", "[b]", "[c]", "[d]", "[e]", "[f]", "[g]", "[h]", "[i]", "[j]", "[k]", "[l]", "[m]", "[n]", "[o]", "[p]", "[q]", "[r]", "[s]", "[t]", "[u]", "[v]", "[w]", "[x]", "[y]", "[z]", "[aa]", "[bb]", "[cc]", "[dd]", "[ee]", "[ff]", "[gg]", "[hh]", "[ii]", "[jj]", "[kk]", "[ll]", "[mm]", "[nn]", "[oo]", "[pp]", "[qq]", "[rr]", "[ss]", "[tt]", "[uu]", "[vv]", "[ww]", "[xx]", "[yy]", "[zz]"]; 
      
      for (i = 0; i < alphabet.length; i++) { 
       num = i+1;
       newText = "["+num+"]";
    
    body.replaceText(alphabet[i], newText);
    }
}

看来您需要 double-escape 方括号:

function testReplace(){
  var doc = DocumentApp.getActiveDocument();
  body = doc.getBody();


  var alphabet = ["\[a\]", "\[b\]", "[c]"]; // c is a test-case


  for (i = 0; i < alphabet.length; i++) { 
    num = i+1;
    newText = "["+num+"]";

    body.replaceText(alphabet[i], newText);
  }
}

之前:

A a [a]

B b [b]

C c [c]

之后:

A a [1]

B b [2]

C [3] [[3]]

.replaceText 方法使用正则表达式进行匹配,因此您需要将搜索结构更改为:

body.replaceText("\[" + alphabet[i] + "\]", num + "]")

这将替换文档中括号内的注释的所有实例。

Paperpile.com 与 google 文档集成,将为您完成这一切。

您是否考虑过使用空括号,然后在完成后放置数字?

例如这是引用[].

写完论文后,使用“查找和替换”并搜索“[]”,然后添加数字。使用“查找和替换”将确保您不会意外遗漏任何括号。

如果您不想使用“查找和替换”,空括号是否可以帮助您使用 Apps 脚本更轻松地为它们编号?