裁剪字符串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 无提示关闭窗口脚本
Aug 17 Javascript
jQuery实现鼠标可拖动调整表格列宽度
May 26 Javascript
javascript使用输出语句实现网页特效代码
Aug 06 Javascript
实例详解ECMAScript5中新增的Array方法
Apr 05 Javascript
Bootstrap 3.x打印预览背景色与文字显示异常的解决
Nov 06 Javascript
JS完成画圆圈的小球
Mar 07 Javascript
JS中call和apply函数用法实例分析
Jun 20 Javascript
vue双向绑定数据限制长度的方法
Nov 04 Javascript
JS实现音乐导航特效
Jan 06 Javascript
微信小程序中使用 async/await的方法实例分析
May 06 Javascript
vue中实现图片压缩 file文件的方法
May 28 Javascript
微信小程序实现点击导航条切换页面
Nov 19 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 截取字符串 分别适合GB2312和UTF8编码情况
2009/02/12 PHP
PHP文件注释标记及规范小结
2012/04/01 PHP
php mb_substr()函数截取中文字符串应用示例
2014/07/29 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
2014/11/18 PHP
PHP列出MySQL中所有数据库的方法
2015/03/12 PHP
PHP中OpenSSL加密问题整理
2017/12/14 PHP
javascript 自动填写表单的实现方法
2010/04/09 Javascript
jQuery下实现等待指定元素加载完毕(可改成纯js版)
2013/07/11 Javascript
原生js做的手风琴效果的导航菜单
2013/11/08 Javascript
JavaScript编写简单的计算器
2015/11/25 Javascript
bootstrap datetimepicker2.3.11时间插件使用
2016/11/19 Javascript
js模拟支付宝密码输入框
2017/04/11 Javascript
JS实现闭包中的沙箱模式示例
2017/09/07 Javascript
bootstrap paginator分页插件的两种使用方式实例详解
2017/11/14 Javascript
Angularjs Ng_repeat中实现复选框选中并显示不同的样式方法
2018/09/12 Javascript
vue.js中使用echarts实现数据动态刷新功能
2019/04/16 Javascript
微信小程序实现搜索指定景点周边美食、酒店
2019/05/18 Javascript
从0到1学习JavaScript编写贪吃蛇游戏
2020/07/28 Javascript
[01:18:21]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
自己使用总结Python程序代码片段
2015/06/02 Python
Python计算斗牛游戏概率算法实例分析
2017/09/26 Python
mac PyCharm添加Python解释器及添加package路径的方法
2018/10/29 Python
python可视化实现代码
2019/01/15 Python
实例详解Matlab 与 Python 的区别
2019/04/26 Python
Pandas之DataFrame对象的列和索引之间的转化
2019/06/25 Python
django之静态文件 django 2.0 在网页中显示图片的例子
2019/07/28 Python
python3使用GUI统计代码量
2019/09/18 Python
Python新手学习函数默认参数设置
2020/06/03 Python
Django模型验证器介绍与源码分析
2020/09/08 Python
python excel和yaml文件的读取封装
2021/01/12 Python
普通简短的个人自我评价
2014/02/15 职场文书
低碳生活的宣传标语
2014/06/23 职场文书
2015年保管员工作总结
2015/04/30 职场文书
学习经验交流会策划书
2015/11/02 职场文书
Redis命令处理过程源码解析
2022/02/12 Redis
详解Flutter和Dart取消Future的三种方法
2022/04/07 Java/Android