裁剪字符串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 相关文章推荐
jquery Firefox3.5中操作select的问题
Jul 10 Javascript
jQuery DOM操作小结与实例
Jan 07 Javascript
JS网页图片按比例自适应缩放实现方法
Jan 15 Javascript
jquery.Ajax()方法调用Asp.Net后台的方法解析
Feb 13 Javascript
用jquery修复在iframe下的页面锚点失效问题
Aug 22 Javascript
详解jquery中$.ajax方法提交表单
Nov 03 Javascript
jquery获取复选框的值的简单实例
May 26 Javascript
深入理解JS函数的参数(arguments)的使用
May 28 Javascript
深入理解Vue官方文档梳理之全局API
Nov 22 Javascript
Vue 组件传值几种常用方法【总结】
May 28 Javascript
微信小程序bindtap事件与冒泡阻止详解
Aug 08 Javascript
js实现简单的贪吃蛇游戏
Apr 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
IIS6.0+PHP5.x+MySQL5.x+Zend3.0x+GD+phpMyAdmin2.8x通用安装实例(已经完成)
2006/12/06 PHP
php中array_multisort对多维数组排序的方法
2020/06/21 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
Aster vs Newbee BO5 第二场2.19
2021/03/10 DOTA
JS对HTML标签select的获取、添加、删除操作
2013/10/17 Javascript
jQuery aminate方法定位到页面具体位置
2013/12/26 Javascript
js实现图片从左往右渐变切换效果的方法
2015/02/06 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
2015/04/07 Javascript
Windows系统下Node.js的简单入门教程
2015/06/23 Javascript
js如何实现淡入淡出效果
2020/11/18 Javascript
AngularJS 日期格式化详解
2015/12/23 Javascript
javascript自动切换焦点控制效果完整实例
2016/02/02 Javascript
jQuery 如何给Carousel插件添加新的功能
2016/04/18 Javascript
JS+Canvas 实现下雨下雪效果
2016/05/18 Javascript
实例讲解javascript实现异步图片上传方法
2017/12/05 Javascript
Element-UI Table组件上添加列拖拽效果实现方法
2018/04/14 Javascript
JavaScript面向对象的程序设计(犯迷糊的小羊)
2018/05/27 Javascript
React学习笔记之高阶组件应用
2018/06/02 Javascript
vue项目中使用eslint+prettier规范与检查代码的方法
2020/01/16 Javascript
在vue中使用echarts(折线图的demo,markline用法)
2020/07/20 Javascript
python版本的读写锁操作方法
2016/04/25 Python
Python操作MongoDB详解及实例
2017/05/18 Python
基于python 字符编码的理解
2017/09/02 Python
对python中两种列表元素去重函数性能的比较方法
2018/06/29 Python
pytorch: Parameter 的数据结构实例
2019/12/31 Python
python logging通过json文件配置的步骤
2020/04/27 Python
pycharm实现print输出保存到txt文件
2020/06/01 Python
美国正宗设计师眼镜在线零售商:EYEZZ
2019/03/23 全球购物
如何手工释放资源
2013/12/15 面试题
九一八事变纪念日演讲稿
2014/09/14 职场文书
环卫个人总结
2015/03/03 职场文书
人事任命通知书
2015/04/21 职场文书
医院志愿者活动总结
2015/05/06 职场文书
计划生育责任书
2015/05/09 职场文书
地道战观后感400字
2015/06/04 职场文书
Python数据可视化之基于pyecharts实现的地理图表的绘制
2021/06/10 Python