裁剪字符串trim()自定义改进版


Posted in Javascript onApril 10, 2013

ECMAScript5已经为字符串定义了原生的trim方法。这个方法可能比会比本文的任何版本的都要快。建议在支持的浏览器中使用原生函数。下面讲述的是自定义trim()函数遇到的问题,改进的过程。功夫在不断淬炼中才能醇正。

JavaScript中没有用于移除字符串头尾空白的原生修剪方法。最常见的自定义trim()函数实现如下所示:

function trim(text) {
return text.replace(/^\s+|\s+$/g, ‘');
}

这种实现使用一个正则表达式匹配字符串开头和结尾的一或多个空白字符。replace()方法用空字符串替换所有匹配的部分。

然而这个实现方式有个基于正则表达式的性能问题,这种影响来自两个方面:一方面是指明有两个匹配模式的管道运算符,另一方面是指明全局应用该模式的g标记。

考虑到这些,可以将正则表达式一分为二并去掉g标记来重写该函数,稍稍提高它的速度。

function trim(text) {
return text.replace(/^\s+/, ‘').replace(/\s+$/, ‘');
}

另一个改进的版本。保证正则表达式尽可能地简单。

function trim(text) {
//删除字符串的头部空白
text = text.replace(/^\s+/, ‘');
// 循环清除尾部空白
for(var i=text.length; i--; ) {
if(/\S/.test(text.charAt(i))) { // \S 非空白字符
text = text.substring(0, i+1);
break;
}
}
return text;
}

使用建议:第2个trim()函数在小规模处理短字符串时性能还是好的。而第3个trim函数在处理长字符串时明显更快。

题外话:简单的裁剪字符串首尾空白字符函数,引发了对正则表达式的性能问题的考虑并实现规避性能问题的方法。技术追求完美,只能在实践中前行。

Javascript 相关文章推荐
用js实现层随着内容大小动态渐变改变 推荐
Dec 19 Javascript
基于jquery的图片轮播 tab切换组件
Jul 19 Javascript
Jquery倒数计时按钮setTimeout的实例代码
Jul 04 Javascript
php+js实现倒计时功能
Jun 02 Javascript
Javascript实现div层渐隐效果的方法
May 30 Javascript
全面解析node 表单的图片上传
Nov 21 Javascript
在JS中如何把毫秒转换成规定的日期时间格式实例
May 11 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
Sep 21 Javascript
浅谈angular2子组件的事件传递(任意组件事件传递)
Sep 30 Javascript
详解jQuery-each()方法
Mar 13 jQuery
详解JavaScript中分解数字的三种方法
Jan 05 Javascript
微信小程序 WeUI扩展组件库的入门教程
Apr 21 Javascript
关于JS管理作用域的问题
Apr 10 #Javascript
js异常捕获方法介绍
Apr 10 #Javascript
Javascript 中 null、NaN和undefined的区别总结
Apr 10 #Javascript
关于IE BUG与字符串截取substr的解决办法
Apr 10 #Javascript
javascipt基础内容--需要注意的细节
Apr 10 #Javascript
使用javascipt---实现二分查找法
Apr 10 #Javascript
页面使用密码保护代码
Apr 10 #Javascript
You might like
第十节--抽象方法和抽象类
2006/11/16 PHP
php关于array_multisort多维数组排序的使用说明
2011/01/04 PHP
非常实用的php弹出错误警告函数扩展性强
2014/01/17 PHP
PHP两种去掉数组重复值的方法比较
2014/06/19 PHP
PHP生成二维码与识别二维码的方法详解【附源码下载】
2019/03/07 PHP
不懂JavaScript应该怎样学
2008/04/16 Javascript
jQuery.ajax 用户登录验证代码
2010/10/29 Javascript
document.documentElement的一些使用技巧
2013/04/18 Javascript
nodejs获取本机内网和外网ip地址的实现代码
2014/06/01 NodeJs
node.js中的events.emitter.removeAllListeners方法使用说明
2014/12/10 Javascript
基于豆瓣API+Angular开发的web App
2015/01/02 Javascript
详细分析使用AngularJS编程中提交表单的方式
2015/06/19 Javascript
jQuery控制DIV层实现由大到小,由远及近动画变化效果
2015/10/09 Javascript
简单理解JavaScript中的封装与继承特性
2016/03/19 Javascript
jquery中validate与form插件提交的方式小结
2016/03/26 Javascript
Vue.js系列之vue-router(上)(3)
2017/01/03 Javascript
使用bootstraptable插件实现表格记录的查询、分页、排序操作
2017/08/06 Javascript
js实现购物车功能
2018/06/12 Javascript
微信小程序引用iconfont图标的方法
2018/10/22 Javascript
angular 实现下拉列表组件的示例代码
2019/03/09 Javascript
vue以组件或者插件的形式实现throttle或者debounce
2019/05/22 Javascript
Javascript通过控制类名更改样式
2019/05/24 Javascript
bootstrap table列和表头对不齐的解决方法
2019/07/19 Javascript
Vue实现回到顶部和底部动画效果
2019/07/31 Javascript
全面解析JavaScript Module模式
2020/07/24 Javascript
python利用beautifulSoup实现爬虫
2014/09/29 Python
利用keras加载训练好的.H5文件,并实现预测图片
2020/01/24 Python
Python线程协作threading.Condition实现过程解析
2020/03/12 Python
用python对oracle进行简单性能测试
2020/12/05 Python
生产部主管岗位职责
2014/01/06 职场文书
我的中国梦演讲稿300字
2014/08/19 职场文书
公司周年庆典标语
2014/10/07 职场文书
刑事辩护授权委托书范本
2014/10/17 职场文书
银行求职信范文怎么写
2015/03/20 职场文书
Java 写一个简单的图书管理系统
2022/04/26 Java/Android
SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询
2022/05/25 SQL Server