¿Cómo hacer un comodín/GREP/búsqueda-reemplazo de expresiones regulares en Illustrator?

InDesign puede realizar funciones avanzadas de búsqueda, cambio, también conocido como búsqueda, reemplazo mediante reglas GREP, también conocidas como expresiones regulares, también conocidas como expresiones regulares, lo que permite todo tipo de reglas comodín y automatización.

¿Hay alguna forma de hacer lo mismo en Illustrator?

Respuestas (2)

Hice un guión para eso. Lo probé en Illustrator CS6 en Mac y en Windows.

Hace una búsqueda y reemplazo de expresiones regulares en el texto de los elementos seleccionados, o en todo el texto si no se selecciona nada.

Funciona en texto de punto, texto de área y texto en una ruta, y no le importa si se incluyen elementos que no son de texto en la selección.

Nota: parece haber un error en el que a veces no se encuentra el texto dentro de los grupos seleccionados; si encuentra esto, intente ejecutar el script sin seleccionar nada o desagrupar.


Regex text replace.js

var scope = app.activeDocument.selection.length ? app.activeDocument.selection : app.activeDocument.pageItems;

var find = prompt("Find: (Text or GREP/regex)","");
if(find !== null){

    var replace = prompt("Replace: (Text or GREP/regex)","");
    if(replace !== null){

        var changes = 0;

        for(var i=0;i<scope.length;i++){  

            var text = scope[i];

            var string = text.contents;  
            if(typeof string == "string"){
                var newstring = string.replace( new RegExp(find, 'g'), replace);
                if (newstring != string) {
                    changes++;
                    var paragraphsArray = newstring.split("\n");
                    text.paragraphs.removeAll(); 
                    for(var ii=0;ii<paragraphsArray.length;ii++){  
                         text.paragraphs.add(paragraphsArray[ii]);
                    }
                }
            }
        }
        alert( changes==1 ? "1 text object changed" : changes + " text objects changed");
    }
}

Cualquier regla GREP de InDesign debería funcionar. Recomiendo crear y probar la regla en InDesign Paragraph styles > GREP rulescon un texto de muestra y Vista previa marcada, luego copiar el código GREP en este script, que es más fácil que probar y error con este script.

En Replace, puede usar $1para cualquier cosa que coincida dentro del primer par de corchetes ( (a )), $2para el segundo, etc.


Aquí hay algunos ejemplos que probé con él:

  • Búsqueda/reemplazo simple:
    • Encontrar:test
    • Reemplazar:hello
  • Simplemente busque/reemplace con un carácter comodín , haciendo coincidir test, tent, te!tetc. caracteres de puntuación: .\This be a sentence\. This be another\.
    • Encontrar:te.t
    • Reemplazar:hello
  • Agregue un % a todos los números en la selección (esto coincide con números con y sin puntos decimales y una coma, como 123, 12.3, 1,234 y 1,234.5 - para números de estilo europeo continental como 1.234,5 cambie el ,y .):
    • Encontrar:(\d+\,?\d*\.?\d*)
    • Reemplazar:$1%
  • Convierta múltiples espacios en un solo espacio:
    • Buscar: +(hay un espacio antes de eso + que se está recortando)
    • Reemplazar: (espacio)
Después de la prueba, los siguientes metacaracteres no se ejecutan correctamente: ^ $ /n (?<=) (?<!) (?=) (?!)
var scope = app.activeDocument.selection.length ? app.activeDocument.selection : app.activeDocument.pageItems;

cambiar a

var scope = app.activeDocument.selection.length ? app.activeDocument.selection : app.activeDocument.textFrames;
¿ activeDocument.textFramesTambién apuntará a texto puntual, texto en una ruta, etc., o solo apuntará a marcos de texto con un cuadro delimitador fijo?