Скрипт Google Doc, капитализировать предложения без удаления других атрибутов

Я хочу создать сценарий для заглавных букв предложений в документе Google, но без изменения существующих атрибутов в определенных словах. например, в документе Google было бы несколько параграфов, каждый из которых имеет несколько предложений. в таком google doc были бы гиперссылки, слова вполужирный, слова вкурсив, слова с подчеркиванием и т. д. Я хочу, чтобы все эти атрибуты остались без изменений; скрипт должен использовать только заглавные буквы предложений, не удаляя существующие атрибуты для этих слов.

я написал следующий скрипт Google Doc, который сделал работу с точки зрения заглавных букв предложений, но скрипт удалил все атрибуты в других словах (гиперссылки, полужирный шрифт, курсив, подчеркивание), как упомянуто выше.

function cap12() {

  // define function "replacement" to change the matched pattern to uppercase
  function replacement(match) { return match.toUpperCase(); }

  // define regex "period, followed by zero or any number 
  // of blank spaces, followed by any lowercase character"
  var regex1 = "(^|\.)(\s*)[a-z]";
  var regex2 = /(^|\.)(\s*)[a-z]/;
  // Logger.log(regex1, regex2);

  // get text matching pattern "regex"
  var body = DocumentApp.getActiveDocument().getBody();
  var foundElement = body.findText(regex1);
  // Logger.log(foundElement);

  while (foundElement != null) {
    // Get the text object from the element
    var foundText = foundElement.getElement().asText();   

    // capitalize the character after the period   
    var str1 = foundText.getText();
    var str2 = str1.replace(regex2, replacement);
    foundText.setText(str2);

    // Find the next match
    foundElement = body.findText(regex1, foundElement);
  }

}

Я ценю любую помощь, чтобы указать на мои ошибки. благодарю вас.

ПРИМЕЧАНИЕ: приведенный выше скрипт cap12 является продолжением моего проекта по разработке скрипта Google для заглавных букв предложений, как описано в посте.Скрипт Google Doc для заглавных предложений, окончательный сценарий cap7 в этом посте работал только локально над выделенным текстом (т.е. не над всем документом), но также удалял все атрибуты, такие как гиперссылки, полужирный шрифт, курсив, подчеркивание.

читая соответствующие посты, перечисленные в правом столбце, более или менее случайным образом, руководствуясь, возможно, инстинктом, я наткнулся на хороший сценарий, который, вероятно, был написан профессионалом, из которого новички (как я) могли бы многому научиться. поэтому я описал то, что я сделал ниже, на случай, если кому-то будет интересно.

из поста, относящегося к моему нынешнему посту, под названиемGoogle Apps Script / поиск по Javascript и замена на регулярные выражения не работаютя заметил еще один связанный постНайти и изменить неизвестные строки в верхний регистр в документе Google Apps Script с помощью JS, в котором был очень хороший код, опубликованныйMogsdad, сначала, читая обсуждение, я подумал, что должен попытаться понять этот код, опубликованный в ответеMogsdad.

Затем я заметил предложение «Следующий скрипт является частью дополнения документа, источник доступен вэтот смысл, вchangeCase.js"(мне все еще нужно выяснить, что означает" gist "; что-то, связанное с GitHub. Хорошо," gist "объясняется в постеВ чем разница между github и gist? [закрыто].)

поэтому я посмотрел на ссылкуэтот смысли действительно я нашел сценарийchangeCase.js это содержало ПОЧТИ то, что я пытался развить (то есть, «Дело о приговоре»; некоторые проблемы описаны ниже):

changeCase.js - Document add-in, provides case-change operations in the add-in Menu.

onOpen - installs "Change Case" menu
_changeCase - worker function to locate selected text and change text case. Case conversion is managed via callback to a function that accepts a string as a parameter and returns the converted string.
helper functions for five cases
UPPER CASE
lower case
Title Case
Sentence case
camelCase
Fountain-lite, screenplay formatting - see http://fountain.io/

это был потрясающий код; Мне потребовалось бы много времени, чтобы достичь этого уровня, чтобы разработать такой код.

я установил скриптchangeCase.js в моем Google Doc, закрыли Google Doc, чтобы открыть его снова, чтобы активировать надстройкуchangeCase.js, затем я проверил вариант «Приговор»; скрипт работал хорошо в том смысле, что я мог выбрать текст, в котором я хотел использовать заглавные буквы, избегая слов с особым форматированием, таких как жирный шрифт, курсив, подчеркивание и т. д.

но когда я выбрал текст, содержащий слова, выделенные жирным шрифтом (и / или курсивом, и / или подчеркиванием), атрибут boldface будет удален (точно такая же проблема, которую я хотел решить). так что сценарийchangeCase.js не решил мою проблему, но предоставил обходной путь.

сценарийchangeCase.js работал только локально на выделенном тексте, тогда как скриптcap7 в моем постеСкрипт Google Doc для заглавных предложений, который работал на весь абзац, хотя я выбрал только часть абзаца.

другими словами, я мог бы изменить свой сценарийcap7 работать как сценарий «Вариант предложения»changeCase.js, Я считаю, что проблема заключалась в том, что я выполнял «глобальный» поиск и замену вместо «локального» поиска и замены в выделенном тексте.

проблема с опцией "Case Sentence Case"changeCase.js было то, что он преобразовал в нижний регистр все символы в выделенном тексте, что было не тем, что я хочу, поскольку были символы, которые я хотел сохранить в верхнем регистре (например, имена людей и т. д.). я хотел использовать только заглавные буквы в выделенном тексте, не изменяя ничего в этих предложениях.

чтобы сделать то, что я описал выше, просто удалите метод "toLowerCase" в коде:

// https://stackoverflow.com/a/19089667/1677912
function _toSentenceCase (str) {
  var rg = /(^\s*\w{1}|\.\s*\w{1})/gi;
  return str.toLowerCase().replace(rg, function(toReplace) {
    return toReplace.toUpperCase();
  });
}

то есть используйте следующий модифицированный код:

function _toSentenceCase (str) {
  var rg = /(^\s*\w{1}|\.\s*\w{1})/gi;
  return str.replace(rg, function(toReplace) {
    return toReplace.toUpperCase();
  });
}

это сработало.

Еще одна проблема со скриптомchangeCase.js было то, что он работал только по одному абзацу за раз, что не так эффективно.

Я хотел разработать сценарий, который будет работать со всем документом, без удаления существующих атрибутов (гиперссылки, полужирный шрифт, курсив, подчеркивание).

Я ценю, если кто-то может указать на ошибки / проблемы в моем сценарииcap12b в постеGoogle Doc скрипт, атрибуты (жирный, курсив, подчеркивание) не отображаются в журнале.

Ответы на вопрос(0)

Ваш ответ на вопрос