如何检索光标当前位于Google Doc中的句子?

时间:2017-01-19 22:10:05

标签: google-apps-script google-docs google-docs-api

我希望能够获取用户当前正在编辑的句子的字符串。这应该是包含光标的句子。 现在,我知道我可以使用以下内容获取光标周围的元素:

 user = User.where('conversation_participant like ? or first_name like ?', query, query)

然后使用以下正则表达式搜索它以逐句隔离。

var cursor = DocumentApp.getActiveDocument().getCursor();
var surroundingTextStr = cursor.getSurroundingText().getText();

如何检查每个句子以查看它是否包含光标?我知道通过搜索周围的文本作为字符串删除了很多位置信息,但我可能然后在文档中搜索该字符串并检查RangeElement和Cursor的位置?我真的不确定。

由于

1 个答案:

答案 0 :(得分:1)

因此,在我将此标记为答案之前,我更希望看到适用于Google Apps Scripts API的实现。这只是一个偷偷摸摸的解决方法(读作:作弊)。

以下是我的工作实现。

var cursor = DocumentApp.getActiveDocument().getCursor();
var surroundings = cursor.getSurroundingText();
var marker = '\u200B';  // A zero-wdith space character - i.e. a hidden marker.
cursor.insertText(marker);
var surroundingTextStr = surroundings.getText();  // Copy to string
surroundings.replaceText(marker, '');  // Remove the marker from the document.

// Build sentence pattern, allowing for marker.
var pattern = /([A-Z\u200B][^\.!?]*[\.!?])/ig;  
var match;
while ((match = pattern.exec(surroundingTextStr)[0]) != null){
  Logger.log(match);
  if (/\u200B/.test(match)){
    match = match.replace(marker, '');
    Logger.log("We found the sentence containing the cursor!");
    Logger.log(match);
  }
}

因为API没有简单的方法来识别光标在其段落中的位置,所以我用光标放置了应该是零宽度的Unicode字符。

此Unicode字符\ u200B用作标记。我将周围的文本复制到句子中,然后找到包含该标记的句子。当我发现它时,我知道我找到了光标所在的句子!请务必清除标记文档。

另一方面,如果Position类实现了某种索引或比较位置的方式,我会很高兴。