无法使用简单的正则表达式 select 来自 Google 文档的某些文本
Unable to select some text from Google Docs with a simple regex
我试图在 Google Docs 文档上用一些正则表达式突出显示一些文本(在下面的示例中我想突出显示 "ORGANIZA"),但我无法首先使用一个简单的正则表达式来查找 "category_name" 字符串。
为什么这样:
function highlightTextTwo() {
/* DOCUMENT DEFINITION */
var doc = DocumentApp.openById('1M6JmJPndLS_hkdaUo5holsdxB5GSSrcWMa1j4Hh7Dig');
/* VARIABLE DEFINITION */
var highlightStyle = {};
var paras = doc.getParagraphs();
var textLocation = {};
var i;
/* REGEX DEFINITION */
var MyRegex = new RegExp('category_name','i');
/* COLOR STYLE DEFINITION */
highlightStyle[DocumentApp.Attribute.FOREGROUND_COLOR] = '#FF0000';
/* CODE */
for (i=0; i<paras.length; ++i) {
Logger.log( paras[i].findText(MyRegex) );
}
}
应用于此文档:
{
"map_image": "mapa_con_close_button.png",
"categories":[
{
"category_id": 1,
"category_name": "ORGANIZA",
"color": "#4591D0",
"icon_image": "Organiza.png"
},
{
"category_id": 2,
"category_name": "DELEGA",
"color": "#94C5DD",
"icon_image": "Delega.png"
},
{
"category_id": 3,
"category_name": "NEGOCIA Y GESTIONA EL CONFLICTO",
"color": "#E7344A",
"icon_image": "Negocia_y_Gestiona.png"
}
returns这个:
[15-06-03 20:12:48:026 CEST] null
[15-06-03 20:12:48:027 CEST] null
[15-06-03 20:12:48:028 CEST] null
[15-06-03 20:12:48:029 CEST] null
[15-06-03 20:12:48:030 CEST] null
[15-06-03 20:12:48:030 CEST] null
取而代之的是一些空值和一个 "category_name"。
我找到了一种显示所有 category_name
字符串的方法。要点:
- 在
while
循环中使用 RegExp exec
而不是 od findText
- 要获得所有出现次数,我们需要使用带有正则表达式的
g
标志
- 要访问段落中的文本,我们需要
getText()
代码:
var paras = doc.getParagraphs();
var MyRegex = new RegExp('category_name','ig');
for (i=0; i<paras.length; ++i) {
while (match = MyRegex.exec(paras[i].getText()))
{
Logger.log(match[0]);
}
}
日志中的输出:
[15-06-04 21:07:36:320 CEST] category_NAME
[15-06-04 21:07:36:322 CEST] category_name
[15-06-04 21:07:36:324 CEST] category_name
编辑:
这是一种用红色突出显示匹配项的方法:
var paras = doc.getParagraphs();
var MyRegex = new RegExp('category_name','ig');
for (i=0; i<paras.length; ++i) {
while (match = MyRegex.exec(paras[i].getText()))
{
var searchResult = paras[i].findText(match[0]);
if (searchResult !== null) {
var thisElement = searchResult.getElement();
var thisElementText = thisElement.asText();
thisElementText.setBackgroundColor(searchResult.getStartOffset(), searchResult.getEndOffsetInclusive(),"#FF0000");
}
}
}
我试图在 Google Docs 文档上用一些正则表达式突出显示一些文本(在下面的示例中我想突出显示 "ORGANIZA"),但我无法首先使用一个简单的正则表达式来查找 "category_name" 字符串。
为什么这样:
function highlightTextTwo() {
/* DOCUMENT DEFINITION */
var doc = DocumentApp.openById('1M6JmJPndLS_hkdaUo5holsdxB5GSSrcWMa1j4Hh7Dig');
/* VARIABLE DEFINITION */
var highlightStyle = {};
var paras = doc.getParagraphs();
var textLocation = {};
var i;
/* REGEX DEFINITION */
var MyRegex = new RegExp('category_name','i');
/* COLOR STYLE DEFINITION */
highlightStyle[DocumentApp.Attribute.FOREGROUND_COLOR] = '#FF0000';
/* CODE */
for (i=0; i<paras.length; ++i) {
Logger.log( paras[i].findText(MyRegex) );
}
}
应用于此文档:
{
"map_image": "mapa_con_close_button.png",
"categories":[
{
"category_id": 1,
"category_name": "ORGANIZA",
"color": "#4591D0",
"icon_image": "Organiza.png"
},
{
"category_id": 2,
"category_name": "DELEGA",
"color": "#94C5DD",
"icon_image": "Delega.png"
},
{
"category_id": 3,
"category_name": "NEGOCIA Y GESTIONA EL CONFLICTO",
"color": "#E7344A",
"icon_image": "Negocia_y_Gestiona.png"
}
returns这个:
[15-06-03 20:12:48:026 CEST] null
[15-06-03 20:12:48:027 CEST] null
[15-06-03 20:12:48:028 CEST] null
[15-06-03 20:12:48:029 CEST] null
[15-06-03 20:12:48:030 CEST] null
[15-06-03 20:12:48:030 CEST] null
取而代之的是一些空值和一个 "category_name"。
我找到了一种显示所有 category_name
字符串的方法。要点:
- 在
while
循环中使用 RegExpexec
而不是 odfindText
- 要获得所有出现次数,我们需要使用带有正则表达式的
g
标志 - 要访问段落中的文本,我们需要
getText()
代码:
var paras = doc.getParagraphs();
var MyRegex = new RegExp('category_name','ig');
for (i=0; i<paras.length; ++i) {
while (match = MyRegex.exec(paras[i].getText()))
{
Logger.log(match[0]);
}
}
日志中的输出:
[15-06-04 21:07:36:320 CEST] category_NAME
[15-06-04 21:07:36:322 CEST] category_name
[15-06-04 21:07:36:324 CEST] category_name
编辑:
这是一种用红色突出显示匹配项的方法:
var paras = doc.getParagraphs();
var MyRegex = new RegExp('category_name','ig');
for (i=0; i<paras.length; ++i) {
while (match = MyRegex.exec(paras[i].getText()))
{
var searchResult = paras[i].findText(match[0]);
if (searchResult !== null) {
var thisElement = searchResult.getElement();
var thisElementText = thisElement.asText();
thisElementText.setBackgroundColor(searchResult.getStartOffset(), searchResult.getEndOffsetInclusive(),"#FF0000");
}
}
}