正则表达式 Google 带有 replaceAllText 的 Apps 脚本
RegEx Google Apps Script with replaceAllText
我尝试用 replaceAllText
替换 Google Slides 中的一些文本,如果我提供字符串就可以正常工作,但是我找不到正则表达式的解决方案。
我要改变的是:
N = 500
我尝试使用 replaceAllText
:
的正则表达式变体
/N [=, 0-9]*/
"N [=, 0-9]*"
"N = [0-9]*"
"N = \d*"
/N = \d*/
但没有任何效果。
如何将 replaceAllText
与正则表达式一起使用?
问题:
replaceAllText不支持正则表达式,但精确子串匹配。
解决方案:
您应该改用 find(pattern):
find(pattern): Returns all the ranges matching the search pattern in the current text range. The search is case sensitive.
代码示例:
例如,如果您想查找并替换演示文稿中的所有正则表达式匹配项,您可以执行以下操作:
// 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]*
.
我尝试用 replaceAllText
替换 Google Slides 中的一些文本,如果我提供字符串就可以正常工作,但是我找不到正则表达式的解决方案。
我要改变的是:
N = 500
我尝试使用 replaceAllText
:
/N [=, 0-9]*/
"N [=, 0-9]*"
"N = [0-9]*"
"N = \d*"
/N = \d*/
但没有任何效果。
如何将 replaceAllText
与正则表达式一起使用?
问题:
replaceAllText不支持正则表达式,但精确子串匹配。
解决方案:
您应该改用 find(pattern):
find(pattern): Returns all the ranges matching the search pattern in the current text range. The search is case sensitive.
代码示例:
例如,如果您想查找并替换演示文稿中的所有正则表达式匹配项,您可以执行以下操作:
// 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]*
.