AJAXBBS.NET   yemoo's blog

专注WEB前端及RIA技术 -- XHTML/CSS/JavaScript/Ajax/RIA

导航

« 监听window.open页面的onload事件解决VC++编译的程序出现“没有找到 MFC42D.DLL,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题”的问题 »

一个更高效的JavaScript版trim函数

今天在查看一些正则资料,无意中搜索到了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 注:页面较大,因此加载可能比较慢,请耐心等待一下或者(下载代码)在本地测试

我想这应该是一个执行速度比较快的写法了,但因为个人技术限制,我想应该还有更好的写法,使解析速度更快,如果那位朋友有好的办法,一定记得告诉我。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

About ME

  • 网名:网者归来、yemoo,长期并将继续投身于WEB前端相关技术的学习和推广的大军中,目前就职于杭州淘宝网,从事前端开发相关工作,有事可E-MAIL联系我。
  • Email1:netman8410#163.com
    Email2:yuanzhang#taobao.com
    PS:牛B都是从傻B变来的

Search

网站分类

最近发表

最新评论及回复

文章归档

Powered By Z-Blog 1.8 Arwen Build 81206  豫ICP备06015770号

Copyright 2006-2009 AJAXBBS.NET. All Rights Reserved.