裁剪字符串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 相关文章推荐
键盘控制事件应用教程大全
Nov 24 Javascript
JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
Aug 01 Javascript
JS定时器实现数值从0到10来回变化
Dec 09 Javascript
JavaScript定时器制作弹窗小广告
Feb 05 Javascript
jQuery插件FusionWidgets实现的AngularGauge图效果示例【附demo源码】
Mar 23 jQuery
JS ES6中setTimeout函数的执行上下文示例
Apr 27 Javascript
vue的Virtual Dom实现snabbdom解密
May 03 Javascript
在Js页面通过POST传递参数跳转到新页面详解
Aug 25 Javascript
使用vue-router完成简单导航功能【推荐】
Jun 28 Javascript
layer弹出层扩展主题的方法
Sep 11 Javascript
Webpack3+React16代码分割的实现
Mar 03 Javascript
JavaScript实现栈结构详细过程
Dec 06 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
分页显示Oracle数据库记录的类之二
2006/10/09 PHP
一周学会PHP(视频)Http下载
2006/12/12 PHP
php获取$_POST同名参数数组的实现介绍
2013/06/30 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
JavaScript中令你抓狂的魔术变量
2006/11/30 Javascript
parentElement,srcElement的使用小结
2014/01/13 Javascript
浅析JS中document对象的一些重要属性
2014/03/06 Javascript
js调试系列 源码定位与调试[基础篇]
2014/06/18 Javascript
html的DOM中Event对象onabort事件用法实例
2015/01/21 Javascript
怎么引入(调用)一个JS文件
2016/05/26 Javascript
jquery 标签 隔若干行加空白或者加虚线的方法
2016/12/07 Javascript
详解小程序缓存插件(mrc)
2018/08/17 Javascript
jQuery插件实现非常实用的tab栏切换功能【案例】
2019/02/18 jQuery
简单了解node npm cnpm的具体使用方法
2019/02/27 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
2019/06/17 Javascript
原生JS生成指定位数的验证码
2020/10/28 Javascript
[54:06]OG vs TNC 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[44:43]完美世界DOTA2联赛决赛日 FTD vs GXR 第一场 11.08
2020/11/11 DOTA
Python基础之函数用法实例详解
2014/09/10 Python
python中global与nonlocal比较
2014/11/21 Python
在SAE上部署Python的Django框架的一些问题汇总
2015/05/30 Python
解决python给列表里添加字典时被最后一个覆盖的问题
2019/01/21 Python
Python利用matplotlib做图中图及次坐标轴的实例
2019/07/08 Python
pytorch方法测试详解——归一化(BatchNorm2d)
2020/01/15 Python
Python faker生成器生成虚拟数据代码实例
2020/07/20 Python
英语专业大学生求职简历的自我评价
2013/10/18 职场文书
体育学院毕业生自荐信
2013/11/03 职场文书
初一生物教学反思
2014/01/18 职场文书
《中华少年》教学反思
2014/02/15 职场文书
2014最新党员批评与自我批评材料
2014/09/24 职场文书
2014年校长工作总结
2014/12/11 职场文书
2015年十一国庆节演讲稿
2015/03/20 职场文书
银行反洗钱宣传活动总结
2015/05/08 职场文书
vue项目两种方式实现竖向表格的思路分析
2021/04/28 Vue.js
Django使用channels + websocket打造在线聊天室
2021/05/20 Python
如何在Python项目中引入日志
2021/05/31 Python