裁剪字符串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 相关文章推荐
JavaScript延迟加载
Mar 09 Javascript
Javascript开发包大全整理
Dec 22 Javascript
使用户点击后退按钮使效三行代码
Jul 07 Javascript
基本jquery的控制tabs打开的数量的代码
Oct 17 Javascript
基于jquery跨浏览器显示的file上传控件
Oct 24 Javascript
jquery性能优化高级技巧
Aug 24 Javascript
easyui datagrid 大数据加载效率慢,优化解决方法(推荐)
Nov 09 Javascript
基于js实现的限制文本框只可以输入数字
Dec 05 Javascript
JS匿名函数内部this指向问题详析
May 10 Javascript
vue中使用echarts的示例
Jan 03 Vue.js
Angular处理未可知异常错误的方法详解
Jan 17 Javascript
何时使用Map来代替普通的JS对象
Apr 29 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
无线电波是什么?它是怎样传输的?
2021/03/01 无线电
需要使用php模板的朋友必看的很多个顶级PHP模板引擎比较分析
2008/05/26 PHP
PHP 动态随机生成验证码类代码
2010/04/09 PHP
yii上传文件或图片实例
2014/04/01 PHP
php分页查询mysql结果的base64处理方法示例
2017/05/18 PHP
PHP面向对象五大原则之开放-封闭原则(OCP)详解
2018/04/04 PHP
laravel 使用事件系统统计浏览量的实现
2019/10/16 PHP
JavaScript 编程引入命名空间的方法与代码
2007/08/13 Javascript
JavaScipt基本教程之JavaScript语言的基础
2008/01/16 Javascript
js DOM 元素ID就是全局变量
2012/09/20 Javascript
php+js实现倒计时功能
2014/06/02 Javascript
如何调试异步加载页面里包含的js文件
2014/10/30 Javascript
asp.net中oracle 存储过程(图文)
2015/08/12 Javascript
AngularJS入门教程之迭代器过滤详解
2016/08/18 Javascript
详解js中call与apply关键字的作用
2016/11/21 Javascript
JS中微信小程序自定义底部弹出框
2016/12/22 Javascript
jQuery实现扑克正反面翻牌效果
2017/03/10 Javascript
ES6中Proxy与Reflect实现重载(overload)的方法
2017/03/30 Javascript
JS 验证密码 不能为空,必须含有数字、字母、特殊字符,长度在8-12位
2017/06/21 Javascript
微信小程序动态增加按钮组件
2018/09/14 Javascript
js+html实现周岁年龄计算器
2019/06/25 Javascript
微信小程序将页面按钮悬浮固定在底部的实现代码
2020/10/29 Javascript
flask框架路由常用定义方式总结
2019/07/23 Python
Python使用itchat模块实现简单的微信控制电脑功能示例
2019/08/26 Python
Python 判断时间是否在时间区间内的实例
2020/05/16 Python
浅谈HTML5 FileReader分布读取文件以及其方法简介
2017/11/09 HTML / CSS
阿迪达斯西班牙官方网站:adidas西班牙
2016/07/21 全球购物
红领巾广播站广播稿
2014/02/01 职场文书
求职信怎么写
2014/05/23 职场文书
施工安全责任书范本
2014/07/24 职场文书
六年级语文下册教学计划
2015/01/22 职场文书
综合素质评价个性与发展自我评价
2015/03/06 职场文书
Nginx本地目录映射实现代码实例
2021/03/31 Servers
Vue Element-ui表单校验规则实现
2021/07/09 Vue.js
海贼王十大潜力果实,路飞仅排第十,第一可毁世界(震震果实)
2022/03/18 日漫
以下牛机,你有几个
2022/04/05 无线电