Photoshop中查找和替换文字问题

Find and replace text problem in Photoshop

在 photoshop 中,假设我有几个文本图层,内容如下:

Text layer 1:  1@@text01@@abc
Text layer 2:  2@@text02@@cef
Text layer 3:  3@@text03@@hgi

我想替换所有以 first@end@ 开头的图层文本(画板中每个文本图层的内容,而不是图层面板的名称),即 @@text..@@## 这样结果就是:

Text layer 1:  1##abc
Text layer 2:  2##cef
Text layer 3:  3##hgi

我能做到吗?

谢谢。

你基本上需要做3个操作:

  • 层层遍历,select一层一层;
  • 使用regular expression模式替换图层名称的一部分;
  • 用新名称重命名图层;

它的基本*版本可能如下所示:

var layer;

// looping through top layers
for (var i = 0; i < activeDocument.layers.length; i++) {
  layer = activeDocument.layers[i]; // for ease of read
  activeDocument.activeLayer = layer; // making the layer active
  layer.name = layer.name.replace(/@.*@/,'##'); // replacing the layer name. @.*@ regex pattern will select anything between two @ symbols
}

更新:替换图层文字内容

基本上是一样的,只是增加了一些内容。您需要检查 layer.kind 是否为 LayerKind.TEXT 而不是更改 layer.name 您需要更改 layer.textItem.contents

*。请注意,activeDocument.layers 集合仅包含顶层图层。如果您的文档有组(又名文件夹)或画板,您需要通过具有不同功能的嵌套图层:类似于 this

我尝试了下面的脚本,它确实有效,但不知道我是否遗漏了任何结构:

var layer;

// looping through top layers
for (var i = 0; i < activeDocument.layers.length; i++) {
  layer = activeDocument.layers[i]; // for ease of read
  activeDocument.activeLayer = layer; // making the layer active
  layer.name = layer.name.replace(/@.*@/,''); // replacing the layer name. @.*@ regex pattern will select anything between two @ symbols
  layer.textItem.contents = layer.textItem.contents.replace(/@.*@/,''); // replacing the layer name. @.*@ regex pattern will select anything between two @ symbols
}