裁剪字符串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 模拟JQuery的Ready方法实现并出现的问题
Dec 06 Javascript
对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!
Oct 29 Javascript
Eclipse去除js(JavaScript)验证错误
Feb 11 Javascript
js 获取页面高度和宽度兼容 ie firefox chrome等
May 14 Javascript
jQuery 重复加载错误以及修复方法
Dec 16 Javascript
浅谈JavaScript中的字符编码转换问题
Jul 07 Javascript
jQuery简单设置文本框回车事件的方法
Aug 01 Javascript
解析如何利用iframe标签以及js制作时钟
Dec 08 Javascript
js实现简单的网页换肤效果
Jan 18 Javascript
ionic环境配置及问题详解
Jun 27 Javascript
angular中子控制器向父控制器传值的实例
Oct 08 Javascript
JS实现canvas简单小画板功能
Jun 23 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
Snoopy类使用小例子
2008/04/15 PHP
PHP一些常用的正则表达式字符的一些转换
2008/07/29 PHP
一个简洁实用的PHP缓存类完整实例
2014/07/26 PHP
10条php编程小技巧
2015/07/07 PHP
JQuery Tab选项卡效果代码改进版
2010/04/01 Javascript
javascript分页代码(当前页码居中)
2012/09/20 Javascript
JQuery中使用ajax传输超大数据的解决方法
2014/07/14 Javascript
js实时获取并显示当前时间的方法
2015/07/31 Javascript
js中 计算两个日期间的工作日的简单实例
2016/08/08 Javascript
vuex实现简易计数器
2016/10/27 Javascript
怎样判断jQuery当前元素是隐藏还是显示
2016/11/23 Javascript
微信小程序实现tab页面切换功能
2018/07/13 Javascript
在vue项目中使用Jquery-contextmenu插件的步骤讲解
2019/01/27 jQuery
js Array.slice的8种不同用法示例
2019/07/10 Javascript
Vue实现腾讯云点播视频上传功能的实现代码
2020/08/17 Javascript
[50:59]2018DOTA2亚洲邀请赛 4.7 总决赛 LGD vs Mineski第四场
2018/04/10 DOTA
Python中正则表达式详解
2017/05/17 Python
Python3 使用cookiejar管理cookie的方法
2018/12/28 Python
使用Python的OpenCV模块识别滑动验证码的缺口(推荐)
2019/05/10 Python
Django 数据库同步操作技巧详解
2019/07/19 Python
ansible动态Inventory主机清单配置遇到的坑
2020/01/19 Python
pytorch对梯度进行可视化进行梯度检查教程
2020/02/04 Python
iPython pylab模式启动方式
2020/04/24 Python
Python日志打印里logging.getLogger源码分析详解
2021/01/17 Python
html5响应式开发自动计算fontSize的方法
2020/01/13 HTML / CSS
丝芙兰墨西哥官网:Sephora墨西哥
2020/05/30 全球购物
玩具公司的创业计划书
2013/12/31 职场文书
缓刑人员思想汇报
2014/10/11 职场文书
刑事上诉状(量刑过重)
2015/05/23 职场文书
2015年小学语文工作总结
2015/05/25 职场文书
六一儿童节主持开场白
2015/05/28 职场文书
小兵张嘎电影观后感
2015/06/03 职场文书
吴仁宝观后感
2015/06/09 职场文书
会议新闻稿
2015/07/17 职场文书
积极心理学课程心得体会
2016/01/22 职场文书
如何在Python中创建二叉树
2021/03/30 Python