今天在查看一些正则资料,无意中搜索到了Rank写的一片题为《从trim原型函数看js正则表达式的性能》的文章,读完后觉得这篇文章理论上是有一些道理的,对于正则写的trim网上到处都是,看到Rank这么写的代码:
this.replace(/^[\s\t ]+|[\s\t ]+$/g, '');这里我顺便扯一句,这种写法有点啰嗦了,常见的写法为:
this.replace(/^\s+|\s+$/g, '');\s已经包含了空格和\t在内,因此第一种写法就显得有那么一点啰嗦。
回到正题,对于正则匹配,尽管表达式看起来总是有那么一点奇怪,但其有着功能强大,代码简单等优点,因此仍然得到很多程序员的喜欢。偶也是正则的一个超级铁丝。不过之前层两次遇到了正则一个很奇怪的执行问题,让我很是郁闷。记得一次用正则来替换一个串,替换好像好快就完了,但是正则貌似还没有执行完,页面被卡住,最终也没有找到,不过换了另外一个写法就没有这个问题,这种问题跟正则引擎的解析方式有着必然的关系,但对于其解析方式我不懂也没有去考究过。
今日读了这篇日志,让我似乎明白了那么一点点,我决定来个测试,为了看出效果,我创建了超大的字符串,其中含有n多空格、tab等。结果运行发现运行时间还是很有差距的。
trim函数的代码如下:function trim(str) {
str=str.replace(/^\s+/g, '');
for(var i=str.length-1;i>=0;i--){
if(!/^\s$/.test(str.substr(i,1)))break;
}
return str.substring(0,i+1)
}这里采用的方式为:开始部分用正则替换,结尾则通过传统方式来查找替换。
测试地址:http://www.ajaxbbs.net/test/trimTest.html
注:页面较大,因此加载可能比较慢,请耐心等待一下或者(下载代码)在本地测试
我想这应该是一个执行速度比较快的写法了,但因为个人技术限制,我想应该还有更好的写法,使解析速度更快,如果那位朋友有好的办法,一定记得告诉我。
网名:网者归来[yemoo],专注前端开发,关注互联网发展,目前就职于上海。