- 您想在 Google 文档中检索
<li ...>....</li> 的文本。
- 您希望使用 Google Apps 脚本实现此目的。
如果我的理解是正确的,那么这个答案呢?请认为这只是几个可能的答案之一。
问题和解决方法:
在你的情况下,你想使用<li sheet="[a-zA-Z0-9]*">[\s\S]*?<\/li>的模式,请修改为<li sheet="[a-zA-Z0-9]*">[\\s\\S]*?<\/li>。在您的情况下,<li ...>....</li> 有几个段落。 (根据您的示例值,我是这样想的。)由此,当const searchPattern = '<li sheet="[a-zA-Z0-9]*">[\\s\\S]*?<\/li>' 的模式用于body.findText(searchPattern) 时,null 被返回。如果将<li ...>....</li> 放在一个段落中,则body.findText(searchPattern) 返回<li ...>....</li>。
为了搜索有多个段落的<li ...>....</li>,下面的解决方法如何?此变通方法的流程如下。
流程:
- 使用
<li sheet= 和<\/li> 作为搜索模式。
- 使用
<li sheet=的模式,检索<li ...>的开头段落。
- 使用
<\/li>的模式,检索</li>的结尾段落。
- 检索检索到的开头和结尾段落之间的文本。
- 此循环一直持续到搜索完所有
<li ...>....</li> 值为止。
示例脚本:
function parseLists(body) {
// var doc = DocumentApp.getActiveDocument();
// var body = doc.getBody();
var pattern1 = "<li sheet=";
var pattern2 = "<\/li>";
var range1 = body.findText(pattern1);
var res = [];
while (range1) {
var temp = {};
var p1 = range1.getElement().getParent();
temp.startIndex = body.getChildIndex(p1);
var range2;
if (p1) {
range2 = body.findText(pattern2, range1);
var p2 = range2.getElement().getParent();
temp.endIndex = body.getChildIndex(p2) + 1;
var texts = "";
// for (var i = temp.startIndex + 1; i < temp.endIndex - 1; i++) {
for (var i = temp.startIndex; i < temp.endIndex; i++) {
texts += body.getChild(i).asParagraph().getText();
}
temp.texts = texts;
res.push(temp);
}
range1 = body.findText(pattern1, range2);
}
Logger.log(res)
}
结果:
当您的示例值被放入新的 Google 文档并运行脚本时,将检索到以下结果。
[
{
"startIndex": 0,
"endIndex": 5,
"texts": "<li sheet=\"experiences\">{{company_name}}, {{job_location}} — {{job_title}}MONTH {{from}} - {{to}}{{description}}</li>"
},
{
"startIndex": 6,
"endIndex": 9,
"texts": "<li sheet=\"other\">{{test}}</li>"
}
]
参考资料:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。