如果完全支持 JS,您可以使用基于 DOM 的解决方案。
var html = "<font color=\"#FF0202\">NOT THIS ONE</font><font color=\"#FF0101\">\n Data which is want to fetch\n</font>";
var faketag = document.createElement('faketag');
faketag.innerHTML = html;
var arr = [];
[].forEach.call(faketag.getElementsByTagName("font"), function(v,i,a) {
if (v.hasAttributes() == true) {
for (var o = 0; o < v.attributes.length; o++) {
var attrib = v.attributes[o];
if (attrib.name === "color" && attrib.value === "#FF0101") {
arr.push(v.innerText.replace(/^\s+|\s+$/g, ""));
}
}
}
});
document.body.innerHTML = JSON.stringify(arr);
但是,根据。给GAS reference:
但是,由于 Apps 脚本代码在 Google 的服务器上运行(不是客户端,HTML-service pages 除外),因此基于浏览器的功能(如 DOM 操作或Window API)不可用。
您可以尝试使用正则表达式获取<font color="#FF0101"> 标签的内部文本:
function myFunction() {
var doc = DocumentApp.getActiveDocument();
var paras = doc.getParagraphs();
var MyRegex = new RegExp('<font\\b[^<]*\\s+color="#FF0101"[^<]*>([\\s\\S]*?)</font>','ig');
for (i=0; i<paras.length; ++i) {
while (match = MyRegex.exec(paras[i].getText()))
{
Logger.log(match[1]);
}
}
}
针对<font color="#FF0202">NOT THIS ONE</font><font color="#FF0101"> Data which is want to fetch</font>的结果:
Regex 匹配任何具有color 属性的font 标记,其值为双引号内的#FF0101。 请注意,解析 HTML 时正则表达式不可靠!这个任务的一个更好的正则表达式是
<font\\b[^<]*\\s+color="#FF0101"[^<]*>([^<]*(?:<(?!/font>)[^<]*)*)</font>
如果您的 HTML 数据跨越多个段落,请使用
function myFunction() {
var doc = DocumentApp.getActiveDocument();
var text = doc.getBody().getText();
var MyRegex = new RegExp('<font\\b[^<]*\\s+color="#FF0101"[^<]*>([\\s\\S]*?)</font>','ig');
while (match = MyRegex.exec(text))
{
Logger.log(match[1]);
}
}
有了这个输入:
<font color="#FF0202">NOT THIS ONE</font>
<font color="#FF0101">
Data which is want to fetch
</font>
结果是: