裁剪字符串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 相关文章推荐
getElementById在任意一款浏览器中都可以用吗的疑问回复
May 13 Javascript
利用jQuery的deferred对象实现异步按顺序加载JS文件
Mar 17 Javascript
js+html5绘制图片到canvas的方法
Jun 05 Javascript
妙用Bootstrap的 popover插件实现校验表单提示功能
Aug 29 Javascript
AngularJs表单验证实例代码解析
Nov 29 Javascript
JavaScript数组去重的6个方法
Jan 21 Javascript
jquery中绑定事件的异同
Feb 28 Javascript
webpack写jquery插件的环境配置
Dec 21 jQuery
jQuery实现的滑块滑动导航效果示例
Jun 04 jQuery
layui table 表格模板按钮的实例代码
Sep 21 Javascript
js实现无缝轮播图效果
Mar 09 Javascript
Vue实现摇一摇功能(兼容ios13.3以上)
Jan 26 Vue.js
关于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
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
IIS7.X配置PHP运行环境小结
2011/06/09 PHP
php数组排序usort、uksort与sort函数用法
2014/11/17 PHP
php实现给一张图片加上水印效果
2016/01/02 PHP
关于PHP内置的字符串处理函数详解
2017/02/04 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
PHP设计模式入门之迭代器模式原理与实现方法分析
2020/04/26 PHP
Laravel相关的一些故障解决
2020/08/19 PHP
网页设计常用的一些技巧
2006/12/22 Javascript
异步动态加载js与css文件的js代码
2013/09/15 Javascript
javascript的alert box在java中如何显示多行
2014/05/18 Javascript
百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换
2016/02/19 Javascript
Vue实现购物车功能
2017/04/27 Javascript
Vue实现virtual-dom的原理简析
2017/07/10 Javascript
JavaScript适配器模式详解
2017/10/19 Javascript
three.js实现3D视野缩放效果
2017/11/16 Javascript
小程序getLocation需要在app.json中声明permission字段
2019/04/04 Javascript
angular组件间传值测试的方法详解
2020/05/07 Javascript
Element中Slider滑块的具体使用
2020/07/29 Javascript
[50:12]EG vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python3获取当前文件的上一级目录实例
2018/04/26 Python
pyqt5 实现在别的窗口弹出进度条
2019/06/18 Python
python绘制多个子图的实例
2019/07/07 Python
查看端口并杀进程python脚本代码
2019/12/17 Python
最小二乘法及其python实现详解
2020/02/24 Python
Pycharm激活码激活两种快速方式(附最新激活码和插件)
2020/03/12 Python
Paradigit比利时电脑卖场:购买笔记本、电脑、平板和外围设备
2016/11/28 全球购物
美国知名奢侈美容品牌零售商:Cos Bar
2017/04/21 全球购物
什么是.net
2015/08/03 面试题
护理毕业生自我鉴定
2014/02/11 职场文书
幼儿园教学随笔感言
2014/02/23 职场文书
2014小学数学教研组工作总结
2014/12/06 职场文书
python实现ROA算子边缘检测算法
2021/04/05 Python
redis连接被拒绝的解决方案
2021/04/12 Redis
入门学习Go的基本语法
2021/07/07 Golang
JavaScript实现简单拖拽效果
2021/09/15 Javascript