在 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 脚本更轻松地为它们编号?
我经常撰写研究论文,要求在文中引用括号中的数字 - 例如:“这是引述 [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 脚本更轻松地为它们编号?