如何在Google脚本中替换Google脚本中按字母顺序排列的列表的所有元素

问题描述

我想自动进行一些文档编辑。现在,我正在尝试用〜

替换测验列表中不正确的元素

例如,假设在文档中我具有以下内容,并且已经使用=标记了正确的选择。

The capital of norway is:
a. Haifa
=oslo
c. Lund
d. the Hague
e. Manitoba

我想创建一个脚本来替换a。,c。,d。和e。每个都有〜

我尝试创建一个如下所示的函数

function incorrectAnswera(){
  var body = DocumentApp.getActiveDocument().getBody();
  body.replaceText("a.","~");
}

但是它将替换“ a”的每个实例以及后跟〜的字符。例如,地球变成E〜th。

解决方法

Text.replaceText(searchPattern,replacement)searchPattern使用regular expressions,特别是Google的RE2 library

作为正则表达式,a.将匹配字母“ a”加上其后的任何字符,因为.是正则表达式中的特殊“通配符”,匹配任何字符。

作为正则表达式约定,您可以使用反斜杠.\.字符中删除特殊含义。但是,由于Apps脚本实现将JavaScript字符串作为输入,因此必须(烦人地)添加额外反斜杠才能获得所需的效果。

a\\.匹配字符序列“ a”,后跟一个句点。

这仍然会造成严重破坏,因为如果您有这句话

在雨中,我用雨伞。

它将替换为

在雨中,我用雨伞〜

要解决此问题,我们需要指定表达式的开头,并为此保留^字符。

^a\\.仅在行以“ a”开头并加句点的情况下替换。

要实现您设定的目标:

我想创建一个脚本来替换a。,c。,d。和e。每个都有〜

您还需要使用一组字符来进行匹配,以使用[]进行定义。

要按面值索取您的请求,该集合应为[acde],但是由于您已经用=标记了正确的答案,也许只是使用范围“ a”至“ e”更好:[a-e](包括从a到e的所有5个字母)。

作为最后的细节,如果您希望在a.序列前面使用空白,可以使用\\s*来表示“零个或多个空白字符”,但是替换为可能会删除空白。

// mark the start of the correct answer with a "=" before running this function
function markIncorrectAnswers() {
  DocumentApp.getActiveDocument().getBody()
    .replaceText("^\\s*[a-e]\\.","~");
}