Javascript Google应用程序脚本regex body.findText(searchPattern)如果有新行,则返回null
以下是谷歌文档内容:Javascript Google应用程序脚本regex body.findText(searchPattern)如果有新行,则返回null,javascript,regex,google-apps-script,Javascript,Regex,Google Apps Script,以下是谷歌文档内容: Some text, more text... <li> some lines more lines... </li> And more text 到目前为止,它返回null。我的正则表达式只查找..,但不查找新行,尽管我正在使用建议的(?s)标记以确保包含任何字符和新行: (?)s(.*? 我的正则表达式在和中工作,所以我不明白它在谷歌应用程序脚本中不工作。 您想在Google文档中检索..的文本 您希望使用谷歌应用程序脚本实现这一点 如果
Some text, more text...
<li>
some lines
more lines...
</li>
And more text
到目前为止,它返回null
。我的正则表达式只查找..
,但不查找新行,尽管我正在使用建议的(?s)
标记以确保
包含任何字符和新行:
(?)s(.*?
我的正则表达式在和中工作,所以我不明白它在谷歌应用程序脚本中不工作。- 您想在Google文档中检索
的文本- ..
- 您希望使用谷歌应用程序脚本实现这一点
[\s\s]*?
,请修改为[\\s\\s]*?
。在您的例子中,..
有几个段落。(根据您的示例值,我是这样想的。)这样,当const searchPattern='[\\s\\s]*?“
的模式用于body.findText(searchPattern)
时,将返回null
。如果将..
作为一个段落,则body.findText(searchPattern)
返回..
要搜索包含多个段落的..
,以下解决方法如何?此解决方案的流程如下所示
流量:
- 您想在Google文档中检索
- ..
的文本
- 您希望使用谷歌应用程序脚本实现这一点
如果我的理解是正确的,那么这个答案呢?请把这看作是几个可能的答案之一
问题和解决方法:
在您的情况下,如果要使用[\s\s]*?
,请修改为[\\s\\s]*?
。在您的例子中,..
有几个段落。(根据您的示例值,我是这样想的。)这样,当const searchPattern='[\\s\\s]*?“
的模式用于body.findText(searchPattern)
时,将返回null
。如果将..
作为一个段落,则body.findText(searchPattern)
返回..
要搜索包含多个段落的..
,以下解决方法如何?此解决方案的流程如下所示
流量:
UseRegex非常适合这样的任务。你应该使用javascript的DOMParser。是的,我知道你是对的。我想我只能在一个有效的html文件中使用DOMParser,因为我的Google文档的内容将是一些代码片段和普通文本的混合体?它不需要特别是有效的html,只需要格式良好的XML。因此,只要有一个根元素,并且嵌套的内容遵循正确的XML语法,就可以了。你应该使用javascript的DOMParser。是的,我知道你是对的。我想我只能在一个有效的html文件中使用DOMParser,因为我的Google文档的内容将是一些代码片段和普通文本的混合体?它不需要特别是有效的html,只需要格式良好的XML。因此,只要有一个根元素,并且嵌套的内容遵循正确的XML语法,就可以了。我当然会使用其中的一部分,但我简化了对问题的描述,只关注一个问题:当.. 有任何字符时,包括新行,匹配..
。您建议的正则表达式被Google应用程序脚本视为无效。知道吗?我可能运气不好:@Greg Forel谢谢你的回复。我不得不为我糟糕的英语水平道歉。不幸的是,我无法理解您当前发布的您建议的正则表达式被Google应用程序脚本视为无效。
。因为在我的测试中,示例值可以与示例脚本一起使用。那么你能解释一下它的详细信息吗?我想考虑一下。对不起,你的正则表达式行得通。我用错了。这有助于解决我的问题,再次感谢@Greg Forel感谢您的回复。我很高兴你的问题解决了。如果您的问题已解决,请按“接受”按钮。与您有相同问题的其他人也可以将您的问题作为可以解决的问题。我认为你的问题和解决方案对他们会有帮助。如果你找不到按钮,尽管告诉我。嗨,塔奈克,非常感谢你的回答。我当然会使用其中的一部分,但我简化了对问题的描述,只关注一个问题:当.. 有任何字符时,包括新行,匹配..
。您建议的正则表达式被Google应用程序脚本视为无效。知道吗?我可能运气不好:@Greg Forel谢谢你的回复。我不得不为我糟糕的英语水平道歉。不幸的是,我无法理解您当前发布的您建议的正则表达式被Google应用程序脚本视为无效。
。因为在我的测试中,示例值可以与示例脚本一起使用。那么你能解释一下它的详细信息吗?我想考虑一下。对不起,你的正则表达式行得通。我用错了。这有助于解决我的问题,再次感谢@Greg Forel感谢您的回复。我很高兴你的问题解决了。如果您的问题已解决,请按“接受”按钮。与您有相同问题的其他人也可以将您的问题作为可以解决的问题。我认为你的问题和解决方案对他们会有帮助。如果你找不到按钮,尽管告诉我。
<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)
}
[
{
"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>"
}
]
for (var i = temp.startIndex; i < temp.endIndex; i++) {
for (var i = temp.startIndex + 1; i < temp.endIndex - 1; i++) {