我希望能够获取用户当前正在编辑的句子的字符串。这应该是包含光标的句子。 现在,我知道我可以使用以下内容获取光标周围的元素:
user = User.where('conversation_participant like ? or first_name like ?', query, query)
然后使用以下正则表达式搜索它以逐句隔离。
var cursor = DocumentApp.getActiveDocument().getCursor();
var surroundingTextStr = cursor.getSurroundingText().getText();
如何检查每个句子以查看它是否包含光标?我知道通过搜索周围的文本作为字符串删除了很多位置信息,但我可能然后在文档中搜索该字符串并检查RangeElement和Cursor的位置?我真的不确定。
由于
答案 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类实现了某种索引或比较位置的方式,我会很高兴。