Как обеспечить правильную замену слов в Документах Google с помощью скрипта Google Apps

Допустим, у меня есть этот текст в документе Google: Мой foo не бар, это foobar. Я хочу заменить весь текст foo, bar и foobar в этом документе с помощью скрипта Google Apps. Для этого я использую простой цикл for-in:

const replaceWords = () =>{
  for (let key in mark){
    body.replaceText(key,marks[key])
  }
}

где метки это объект:

const marks = {
  "foo": "x",
  "bar": "y",
  "foobar": "z"
}

Как я могу быть уверен, что такие слова, как foobar, не будут заменены на xy вместо z? Насколько я понимаю, установка ключей с помощью граничного сопоставления "\b", как здесь \\bfoo\\b, должна гарантировать это, но это усугубило ситуацию.

Я не знаю скрипт приложений Google, но с точки зрения регулярных выражений ваша замена должна работать. Что вы имеете в виду под "стало хуже"?

markalex 01.04.2023 21:17
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Пересмотренный сценарий

function replaceMarks() {
  var doc = DocumentApp.getActiveDocument()
  var body = doc.getBody()

  const marks = {
  "foo": "x",
  "bar": "y",
  "foobar": "z"
  }
  for (const [key, value] of Object.entries(marks)) {
    body.replaceText('\\b'+key+'\\b',value)
  }
}

Синтаксис для «replaceText» — replaceText(searchPattern, replacement). searchPattern "передается как строка, а не как объект регулярного выражения JavaScript. Из-за этого вам нужно экранировать обратную косую черту в шаблоне".

SearchPattern становится '\\b'+key+'\\b'

  • \b — граница слова; поэтому он гарантирует целые слова.
  • Они экранируются обратной косой чертой.
  • переменная вставляется между экранированным регулярным выражением.
  • все это передается как строка.

До

После

Другие вопросы по теме

Регулярное выражение для сопоставления вторых повторяющихся слов в строке с использованием R
Регулярное выражение совпадает, но сценарий неожиданно завершается ошибкой?
PostgreSQL — как найти специальные символы, пробелы, дополнительные вкладки и возврат каретки в текстовых полях?
Python Regex для извлечения текста между числами
Регулярное выражение для соответствия либо az, либо 0-9 в любом порядке любой длины или точной строки N/A
Регулярное выражение для соответствия цифрам 0-9 любой длины или точной строке Н/Д
Как разделить строку между запятыми, одним или несколькими пробелами и между цифрами и буквами, но не между точками с регулярным выражением в java?
Поиск при наличии квадратных скобок
Странное поведение регулярного выражения JS
URL-адрес htaccess переписан с папками виртуального языка, удваивает имя страницы как папку в URL-адресе