如何检索光标当前位于 Google Doc 中的句子?
How can I retrieve the sentence where the cursor currently resides in a Google Doc?
我希望能够获取用户当前正在编辑的句子的字符串。这应该是包含光标的句子。
现在,我知道我可以通过以下方式获取光标周围的元素:
var cursor = DocumentApp.getActiveDocument().getCursor();
var surroundingTextStr = cursor.getSurroundingText().getText();
然后用下面的正则表达式逐句查找
var pattern = /([A-Z][^\.!?]*[\.!?])/ig;
var match;
while ((match = pattern.exec(surroundingTextStr)) != null){
// How can I check that this sentence currently holds the cursor?
}
我怎样才能检查每个句子以查看它是否包含光标?我知道通过搜索周围的文本作为字符串会删除很多位置信息,但我是否可以在文档中搜索该字符串并检查 RangeElement 和 Cursor 的位置?我真的不确定。
谢谢
因此,在我将此标记为答案之前,我更希望看到一个与 Google Apps 脚本 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 没有简单的方法来识别光标在其段落中的位置,所以我将 zero-width Unicode 字符放置在光标旁边。
这个 Unicode 字符 \u200B 用作标记。我将周围的文本复制成句子,然后找到包含这个标记的句子。当我找到它时,我知道我找到了光标所在的句子!一定要清除文档的标记。
另一方面,如果位置 class 实现某种索引或比较位置的方法,我会很高兴。
我希望能够获取用户当前正在编辑的句子的字符串。这应该是包含光标的句子。 现在,我知道我可以通过以下方式获取光标周围的元素:
var cursor = DocumentApp.getActiveDocument().getCursor();
var surroundingTextStr = cursor.getSurroundingText().getText();
然后用下面的正则表达式逐句查找
var pattern = /([A-Z][^\.!?]*[\.!?])/ig;
var match;
while ((match = pattern.exec(surroundingTextStr)) != null){
// How can I check that this sentence currently holds the cursor?
}
我怎样才能检查每个句子以查看它是否包含光标?我知道通过搜索周围的文本作为字符串会删除很多位置信息,但我是否可以在文档中搜索该字符串并检查 RangeElement 和 Cursor 的位置?我真的不确定。
谢谢
因此,在我将此标记为答案之前,我更希望看到一个与 Google Apps 脚本 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 没有简单的方法来识别光标在其段落中的位置,所以我将 zero-width Unicode 字符放置在光标旁边。
这个 Unicode 字符 \u200B 用作标记。我将周围的文本复制成句子,然后找到包含这个标记的句子。当我找到它时,我知道我找到了光标所在的句子!一定要清除文档的标记。
另一方面,如果位置 class 实现某种索引或比较位置的方法,我会很高兴。