给文字层的Sourse Text添加表达式:
name
利用substr()
substr括号里有两个参数,第一参数是字符串开始的位置,第二个参数是字符串长度。
例如,我们新建一个文字层,命名为“365个祝福”,给Sourse Text添加表达式“name”,则直接输出的文字是“365个祝福”。
那么,我们如何输出这一串文字中的指定文字?比如前3个字符?或者第3个字到地5个字?
表达式:
name.substr(0,3)
表示从0位置开始,输出3个字符串长度的文字,即输出文字“365”(另:汉字是一个字符,比如这里subsre(0, 5)输出的文字是“365个祝”)
表达式:
name.substr(4,2)
表示从位置4开始,往后两个字符,即“祝福”。
如果经常需要更改输出文字,不确定字符串长度,通常还可以写:
name.substr(0, name.length)
将字符串长度作为输出字符串的长度,这样无论字符串有多长,都可以全部输出出来。
再比如:
name.substr(name.length - 1,1)
可以始终输出最后一个字符。
既然substr()可以定义字符串长度,那么实现打字机效果轻而易举。
name.substr(0,time*50)
用time的值作为字符串长度的值,可以实现打字机效果。
比如,将“365个祝福”里的数字365调用出来,用作图层的scale属性值:
src = parseInt(thisComp.layer("365个祝福").name); [src,src]
parseInt()的作用是将字符串中的数字提出来作为整数输出。
看个例子,之前有了一个文字层,文字为“365个祝福”,再新建一个文字层,给source Text添加表达式:
parseInt(thisComp.layer("个祝福").name)
“365个祝福”,返回“365”
“个祝福”,返回“NaN” //第一个字符不是数字,返回错误;
“365天12个祝福”,返回“365” //仅返回第一组数字;
“036个祝福”,返回“30” //字符串以“0”开头时候,将“0”以后的数字,解析为8进制(或16进制)的数字:
parseInt()的语法为:
parseInt(string, radix)
可将不同进制转换为10进制,string为进制,当radix不填写或填写为“0”的时候,解析为10进制;
radix的值应该在2~36之间。
parseInt("10"); //按10进制解析,返回 10
parseInt("19",10); //将“19”按10进制解析,返回 19 (10+9)
parseInt("11",2); //将“11”按2进制转换为10进制,返回 3 (2+1)
parseInt("17",8); //将“17”按8进制转换为10进制,返回 15 (8+7)
parseInt("1f",16); //将“1f”按16进制转换为10进制,返回 31 (16+15)
新建一个文字层,输入文字:
“Every Day,Every Day,我在等你”
接着,我们试着用表达式将其中的英文变为中文。给Source Text添加表达式:
text.sourceText.replace(/every day/,"每一天")
双斜杠里的内容是要替换的RegExp对象(正则表达式),逗号后引号内的内容,是替换文本。但是这里,我们发现添加表示后,并没有任何变化,因为该表达式是识别大小写的,在字符串中没有找到符合every day的字符,所以不会有变化,我们需要让这个表达式忽略大小写,方法是在第二个双斜杠后添加“i”:
text.sourceText.replace(/every day/i,"每一天")
这时候我们发现只替换了第一个“Every Day”,第二个“Every Day”没有变化,因为表达式找到相符合的字符,替换掉,然后就停下来了。我们希望能够继续找相符合的字符并全局替换,添加“g”:
text.sourceText.replace(/every day/gi,"每一天")
到这里,我们已经将原文字替换成为:
“每一天,每一天,我在等你”
太强了~搜索全网终于找到这个功能,完美解决我的问题,感谢大佬!!!