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
参考文献:
我正在为 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