裁剪字符串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 相关文章推荐
Using the TextRange Object
Oct 14 Javascript
通用JS事件写法实现代码
Jan 07 Javascript
xml 封装与解析(javascript和C#中)
Jul 26 Javascript
javascript 从if else 到 switch case 再到抽象
Jul 17 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件
Aug 24 Javascript
JavaScript中的property和attribute介绍
Dec 26 Javascript
详解JavaScript的Polymer框架中的通知交互
Jul 29 Javascript
解决Window10系统下Node安装报错的问题分析
Dec 13 Javascript
JS表单数据验证的正则表达式(常用)
Feb 18 Javascript
基于JS实现html中placeholder属性提示文字效果示例
Apr 19 Javascript
使用vue-cli导入Element UI组件的方法
May 16 Javascript
js获取url页面id,也就是最后的数字文件名
Sep 25 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
PHP实现邮件群发的源码
2013/06/18 PHP
PHP获取网页所有连接的方法(附demo源码下载)
2016/03/30 PHP
Laravel框架实现的记录SQL日志功能示例
2018/06/19 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
dojo 之基础篇
2007/03/24 Javascript
Mootools 1.2教程(3) 数组使用简介
2009/09/14 Javascript
自制基于jQuery的智能提示插件一枚
2011/02/18 Javascript
js实现鼠标滑过文字链接色彩变化的效果
2015/05/06 Javascript
讲解JavaScript中for...in语句的使用方法
2015/06/03 Javascript
jquery实现的动态回到顶部特效代码
2015/10/28 Javascript
Javascript removeChild()删除节点及删除子节点的方法
2015/12/27 Javascript
jQuery Html控件基本操作(日常收集整理)
2016/03/11 Javascript
原生JS版和jquery版实现checkbox的全选/全不选/点选/行内点选(Mr.Think)
2016/10/29 Javascript
jQuery grep()方法详解及实例代码
2016/10/30 Javascript
探索Javascript中this的奥秘
2016/12/11 Javascript
js数组去重的hash方法
2016/12/22 Javascript
通过button将form表单的数据提交到action层的实例
2017/09/08 Javascript
创建echart多个联动的示例代码
2018/11/23 Javascript
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
小程序接口的promise化的实现方法
2019/12/11 Javascript
vue 移动端记录页面浏览位置的方法
2020/03/11 Javascript
[15:58]DOTA2国际邀请赛采访专栏:Tongfu.Sansheng&KingJ,DK.rOtk
2013/08/08 DOTA
用python代码做configure文件
2014/07/20 Python
详解Python Qt的窗体开发的基本操作
2019/07/14 Python
python实现的读取网页并分词功能示例
2019/10/29 Python
应用化学专业本科生求职信
2013/09/29 职场文书
不打扫卫生检讨书
2014/02/12 职场文书
学习型家庭事迹材料
2014/12/20 职场文书
写给医院的感谢信
2015/01/22 职场文书
高三英语教学计划
2015/01/23 职场文书
三八妇女节寄语
2015/02/27 职场文书
免职通知
2015/04/23 职场文书
2015年干部教育培训工作总结
2015/05/15 职场文书
诚信教育主题班会
2015/08/13 职场文书
原生JS中应该禁止出现的写法
2021/05/05 Javascript
Dubbo+zookeeper搭配分布式服务的过程详解
2022/04/03 Java/Android