Text Layer > Expression Selector > Amount
// gradient
(textIndex-1)*(100/(textTotal-1));Text Layer > Expression Selector > Amount
// make sure "based On" is set to "Characters"
const characterToSelect = "&"; // change character here
const str = text.sourceText.replace(/[\r\n]/gm, ''); // remove line breaks
str[textIndex-1]==characterToSelect ? 100 : 0;// select characterText Layer > Expression Selector > Amount
// make sure "based On" is set to "Words"
const wordToSelect = "and";
const words = text.sourceText.replace(/[\r\n]/gm," ").split(" ").filter(n => n); // split into words
words[textIndex-1]==wordToSelect ? 100 : 0;// select if matchText Layer > Expression Selector > Amount
// make sure "based On" is set to "Lines"
const stringToSelect = "»";
const lines = text.sourceText.split(/\r?\n|\r|\n/g); // split by line break
lines[textIndex-1].indexOf(stringToSelect)!=-1 ? 100 : 0;// select if matchText Layer > Expression Selector > Amount
// make sure "based On" is set to "Lines"
textIndex%2 ? 100 : 0; //swap 100 & 0 to invert the effectText Layer > Expression Selector > Amount
// Animate Amount
// make sure to change "based On" to get the desired effect
const timeOffset=.1; // in seconds
valueAtTime(time-((textIndex-1)*timeOffset))Text Layer > Expression Selector > Amount
// make sure "based On" is set to "Characters"
textIndex === Math.floor(value[0]) ? 0 : 100; // use first axis of "Amount" to animate through the characters




