裁剪字符串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 相关文章推荐
特殊字符、常规符号及其代码对照表
Jun 26 Javascript
javascript firefox不显示本地预览图片问题的解决方法
Nov 12 Javascript
node.js中的buffer.toString方法使用说明
Dec 14 Javascript
Javascript中3个需要注意的运算符
Apr 02 Javascript
JS Attribute属性操作详解
May 19 Javascript
javascript 常用验证函数总结
Jun 28 Javascript
Highcharts入门之简介
Aug 02 Javascript
thinkjs 文件上传功能实例代码
Nov 08 Javascript
深入浅析var,let,const的异同点
Aug 07 Javascript
JavaScript面向对象核心知识与概念归纳整理
May 09 Javascript
js动态生成表格(节点操作)
Jan 12 Javascript
详解JS WebSocket断开原因和心跳机制
May 07 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
再谈Yii Framework框架中的事件event原理与应用
2020/04/07 PHP
多个iframe自动调整大小的问题
2006/09/18 Javascript
为数据添加append,remove功能
2006/10/03 Javascript
jQuery 常见开发使用技巧总结
2009/12/26 Javascript
js 刷新页面的代码小结 推荐
2010/04/02 Javascript
js数据验证集合、js email验证、js url验证、js长度验证、js数字验证等简单封装
2010/05/15 Javascript
JQuery实现绚丽的横向下拉菜单
2013/12/19 Javascript
Jquery 实现table样式的设定
2015/01/28 Javascript
js跨域请求的5中解决方式
2015/07/02 Javascript
jQuery实现可高亮显示的二级CSS菜单效果
2015/09/01 Javascript
Jquery中map函数的用法
2016/06/03 Javascript
vue.js学习笔记:如何加载本地json文件
2017/01/17 Javascript
JavaScript实现二维坐标点排序效果
2017/07/18 Javascript
JS笛卡尔积算法与多重数组笛卡尔积实现方法示例
2017/12/01 Javascript
webpack实用小功能介绍
2018/01/02 Javascript
vue.js与后台数据交互的实例讲解
2018/08/08 Javascript
深入解析koa之中间件流程控制
2019/06/17 Javascript
6种JavaScript继承方式及优缺点(小结)
2020/02/06 Javascript
vscode 调试 node.js的方法步骤
2020/09/15 Javascript
jQuery实现可以扩展的日历
2020/12/01 jQuery
使用Python开发windows GUI程序入门实例
2014/10/23 Python
python简单实现基数排序算法
2015/05/16 Python
python开发之thread线程基础实例入门
2015/11/11 Python
Python抓取电影天堂电影信息的代码
2016/04/07 Python
Python爬取当当、京东、亚马逊图书信息代码实例
2017/12/09 Python
python字典嵌套字典的情况下找到某个key的value详解
2019/07/10 Python
处理textarea中的换行和空格
2019/12/12 HTML / CSS
有趣、实用和鼓舞人心的产品:Inspire Uplift
2019/11/05 全球购物
娱乐地球:Entertainment Earth
2020/01/08 全球购物
秋季运动会通讯稿
2014/01/24 职场文书
市场营销管理制度
2014/01/29 职场文书
资金主管岗位职责范本
2014/03/04 职场文书
中专毕业生的自荐书
2014/07/01 职场文书
联谊活动总结
2014/08/28 职场文书
2014年个人售房协议书
2014/10/30 职场文书
mysql事务对效率的影响分析总结
2021/10/24 MySQL