javascript - 使用 JS 在 Google Apps 脚本文档中查找未知字符串并将其更改为大写

标签 javascript regex google-apps-script

我写在 Fountain markdown http://fountain.io/在谷歌文档中。喷泉是用来写剧本的。我想通过将某些元素自动大写(打开或使用按钮,等等),使在喷泉中书写更加友好。

这是一个格式正确的剧本(在喷泉中):

EXT. GAS STATION - DAY

Susie steps out of her car and walks toward the station attendant.

SUSIE
Hey, Tommy.

TOMMY
Where you been, Sue?  Come on in.

They walk toward the station entrance together.

INT. GAS STATION - NIGHT

etc...

如您所见,编剧中有大量的 CAPS-LOCK 和 SHIFT 业务,而且变得乏味。

这就是为什么我想用小写字母书写(即 int.gas station - day)并让 javascript/GAS 找到该文本并将其大写。与 Angular 色说话时相同:

susie
Hey, Tommy.

会变成

SUSIE
Hey, Tommy.

说话的 Angular 色在他们的名字上方总是有一个空行,在下一行是文本。场景标题总是以 EXT 开头。或 INT。

到目前为止,我在 Stackoverflow 上得到了一些帮助,但我仍在努力让它发挥作用。我得到了一个很棒的正则表达式字符串,可以找到字符名称,但 GAS 的正则表达式实现有限。该正则表达式是 [\n][\n]([^\n]+)[\n][^\n|\s]/gi。我没有运气用正则表达式替换文本。我的 JS 技能是刚出生的婴儿,但我已经完成了 CodeAcademy 的初学者 JS 类(class),这是值得的。

如能在正确的方向上提供任何帮助,我将不胜感激。

最佳答案

要更改 Google 文档中的文本,您需要获取各个元素并对它们进行操作。在 Money Shot 之前,还有一些工作要做,深入研究文档:

paragraphText.toUpperCase();

以下脚本是文档附件的一部分,源代码在 this gist 中可用, 在 changeCase.js 中。

代码.gs

/**
 * Scan Google doc, applying fountain syntax rules.
 * Caveat: this is a partial implementation.
 *
 * Supported:
 *  Character names ahead of speech.
 *
 * Not supported:
 *  Everything else. See http://fountain.io/syntax
 */
function fountainLite() {
  // Private helper function; find text length of paragraph
  function paragraphLen( par ) {
    return par.asText().getText().length;
  }

  var doc = DocumentApp.getActiveDocument();
  var paragraphs = doc.getBody().getParagraphs();
  var numParagraphs = paragraphs.length;

  // Scan document
  for (var i=0; i<numParagraphs; i++) {

    /*
    ** Character names are in UPPERCASE.
    ** Dialogue comes right after Character.
    */
    if (paragraphLen(paragraphs[i]) > 0) {
      // This paragraph has text. If the preceeding one was blank and the following
      // one has text, then this paragraph might be a character name.
      if ((i==0 || paragraphLen(paragraphs[i-1]) == 0) && (i < numParagraphs && paragraphLen(paragraphs[i+1]) > 0)) {
        var paragraphText = paragraphs[i].asText().getText();
        // If no power-user overrides, convert Character to UPPERCASE
        if (paragraphText.charAt(0) != '!' && paragraphText.charAt(0) != '@') {
          var convertedText = paragraphText.toUpperCase(); 
          var regexEscaped = paragraphText.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); // http://stackoverflow.com/a/3561711/1677912
          paragraphs[i].replaceText(regexEscaped, convertedText);
        }
      }
    }
  }
}

关于javascript - 使用 JS 在 Google Apps 脚本文档中查找未知字符串并将其更改为大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24847408/

相关文章:

javascript - 这个 Javascript 代码是什么意思?

Javascript - 如何通过多个字符串进行搜索

javascript 正则表达式,验证日期问题

javascript - 应用脚本 : filter out empty elements from array

java - 有什么方法可以在不复制 javascript 标签的情况下将 ajax 与 jSTL 自定义标签一起使用?

Javascript:何时使用 forEach 而不是 map 的具体示例?

javascript - 如何将数据表与动态创建的表一起使用

c++ - 正则表达式查找所有用位字段定义的结构

google-apps-script - Google Apps 脚本 - 当用户提交表单数据时发送电子邮件

google-apps-script - 将addRows()中的电子表格数据作为数组传递