无法使用简单的正则表达式 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 字符串的方法。要点:

  1. while 循环中使用 RegExp exec 而不是 od findText
  2. 要获得所有出现次数,我们需要使用带有正则表达式的 g 标志
  3. 要访问段落中的文本,我们需要 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");
        }

    }
  }