AS2:通过ExternalInterface使用正则表达式
AS2中没有正则表达式,虽然有人写过这样的正则类,不过有时候只需少量的正则应用,所以想换个解决方案。因为ExternalInterface的call方法可以调用外部容器中的方法,如果我们的flash是运行在浏览器里的话,那么是否能用javascript来为我们做正则匹配呢?
经过测试,这样的方法是可行的。先看下面的测试代码:
//js代码: 创建和执行regExp方法
var js:String=‘function regExp(){var str="‘+str+‘";return str.replace(/myDomain/g,"RIAidea");}regExp();‘
//ExternalInterface在浏览器中用javascript的eval方法来执行上面的js代码,并获取返回值
var newstr:String=flash.external.ExternalInterface.call(‘eval‘,js).toString();
//在浏览器中弹出窗口显示刚才的返回值
flash.external.ExternalInterface.call(‘alert("‘+newstr+‘")‘);
把上面代码copy到主时间轴第一帧上,按F12在浏览器中预览(注意文件名不能为Untitled-X,原因请见我上篇文章)。可以看到浏览器会弹出一个窗口,内容为:www.RIAidea.com。这里主要是利用ExternalInterface在浏览器中用javascript的eval方法来执行上面定义包含regExp方法的js代码,并获取正则返回值。最后,再用EI在浏览器中弹出一个窗口,显示刚才获取的返回值。
最后要说明的是,这种偏方有局限性,只能用于浏览器中的flash程序,而且不宜调用复杂的JS方法,请在合适的地方使用。另外,AS3已支持正则,就不需要考虑这样做了,不过,开发flash的web应用的时候,有些地方还是可以使用这样的把外部方法写在AS中的方法的。