首页 > 解决方案 > 带有 replaceAllText 的正则表达式 Google Apps 脚本

问题描述

我试图用 替换谷歌幻灯片中的一些文本,replaceAllText如果我提供字符串它工作正常,但是我找不到正则表达式的解决方案。

我想改变的是:

N = 500

我尝试过的正则表达式变体replaceAllText

/N [=, 0-9]*/
"N [=, 0-9]*"
"N = [0-9]*"
"N = \d*"
/N = \d*/

但没有任何效果。

如何使用replaceAllText正则表达式?

标签: google-apps-scriptgoogle-slides-api

解决方案


问题:

replaceAllText不支持正则表达式,但完全匹配子字符串。

解决方案:

您应该改用find(pattern)

find(pattern):返回当前文本范围内与搜索模式匹配的所有范围。搜索区分大小写。

代码示例:

例如,如果您想查找并替换演示文稿中的所有正则表达式匹配项,您可以执行以下操作:

// Copyright 2020 Google LLC.
// SPDX-License-Identifier: Apache-2.0

function findAndReplace() {
  var pres = SlidesApp.getActivePresentation();
  var slides = pres.getSlides();
  const pattern = "N = \\d*";
  slides.forEach(slide => { // Iterate through every slide in the presentation
    slide.getShapes().forEach(shape => { // Iterate through every shape in the slide
      const textRange = shape.getText(); // Get shape text
      const matches = textRange.find(pattern); // Find matches
      matches.forEach(match => match.setText("REPLACED TEXT")); // Replace text
    });               
  });
}

笔记:

  • 上面代码示例中的表达式 ( N = \\d*) 有两个反斜杠,因为正如文档所说,any backslashes in the pattern should be escaped. 一个可能的替代方案可能是N = [0-9]*.

推荐阅读