google 文档中突出显示的字数统计(换句话说,不包括单词的出现)

Word count with highlighting (excluding the occurrence of words in other words) in google doc

我正在为 Google 文档编写一个脚本,该脚本计算单词并突出显示它们。该脚本有效,但不尽如人意。部分单词不应该被计算和突出显示。例如,我正在寻找单词 cop,如果有单词 robocop - 跳过它。

我尝试使用 "me" 一词的正则表达式,但似乎不合适,因为我需要通读文本,同时突出显示单词。但也许我只是不明白如何正确地做。

function findWords2(keys) {
  var body = doc.getBody();
  var keysMap = {}; // object for keys with quantity

  // For every word in keys:
  for (var w = 0; w < keys.length; ++w) {
    // Get the current word:
    //var rx = /(.){1}me(.){1}/;
    //var foundElement = rx.exec(doc.getBody().getText()); 
    //var foundElement = body.findText(rx);

    var foundElement = body.findText(keys[w]);
    var count = 0;

    while (foundElement != null) {
      // Get the text object from the element
      var foundText = foundElement.getElement().asText();

      count++;

      // Where in the Element is the found text?
      var start = foundElement.getStartOffset();
      var end = foundElement.getEndOffsetInclusive();

      // Change the background color to yellow
      foundText.setBackgroundColor(start, end, "#FCFC00");

      // Find the next match
      foundElement = body.findText(keys[w], foundElement);
    }
    keysMap[keys[w]] = count; // add current searched keyword to keysMap with quantity
  }

  return JSON.stringify(keysMap, null, 1);
}

因此,如果我们在文本 "Robocop cop cop" 中调用 findWords('cop'),我们会找到并突出显示 cop 3 次,而不是两次。理论上我只需要检查找到的单词的前后字符,但是怎么办呢?

你应该使用单词边界\b:

\bcop\b

请注意 body.findText() 将正则表达式作为字符串接收。所以,你应该转义 \:

body.findText("\bcop\b")

如果您要搜索纯字符串,(使用 regexp.exec),

/\bcop\b/g

参考文献: