裁剪字符串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中类的定义及其方式(《javascript高级程序设计》学习笔记)
Jul 04 Javascript
jquery图片延迟加载 前端开发技能必备系列
Jun 18 Javascript
在ASP.NET中使用JavaScript脚本的方法
Nov 12 Javascript
ExtJS4如何给同一个formpanel不同的url
May 02 Javascript
javascript显示中文日期的方法
Jun 18 Javascript
输入法的回车与消息发送快捷键回车的冲突解决方法
Aug 09 Javascript
JS冒泡事件与事件捕获实例详解
Nov 25 Javascript
angular-ui-sortable实现可拖拽排序列表
Dec 28 Javascript
Vue实现远程获取路由与页面刷新导致404错误的解决
Jan 31 Javascript
Vue3 的响应式和以前有什么区别,Proxy 无敌?
May 20 Javascript
JS判断数组是否包含某元素实现方法汇总
Jun 24 Javascript
在vue中import()语法不能传入变量的问题及解决
Apr 01 Vue.js
关于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中的extract的作用分析
2008/04/09 PHP
php带抄送和密件抄送的邮件发送方法
2015/03/20 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
2016/01/14 PHP
深入浅析PHP无限极分类的案例教程
2016/05/09 PHP
PHP实现的激活用户注册验证邮箱功能示例
2017/06/06 PHP
MC Dialog js弹出层 完美兼容多浏览器(5.6更新)
2010/05/06 Javascript
JS实现的省份级联实例代码
2013/06/24 Javascript
js 获取、清空input type="file"的值(示例代码)
2013/12/24 Javascript
js类式继承的具体实现方法
2013/12/31 Javascript
JavaScript中获取Radio被选中的值
2015/11/11 Javascript
点评js异步加载的4种方式
2015/12/22 Javascript
用JS动态设置CSS样式常见方法小结(推荐)
2016/11/10 Javascript
vue滚动轴插件better-scroll使用详解
2017/10/17 Javascript
JavaScript生成简单等差数列
2017/11/28 Javascript
在Vue组件中使用 TypeScript的方法
2018/02/28 Javascript
nodejs 日志模块winston的使用方法
2018/05/02 NodeJs
微信小程序实现手指触摸画板
2018/07/09 Javascript
JS浅拷贝和深拷贝原理与实现方法分析
2019/02/28 Javascript
vue 获取元素额外生成的data-v-xxx操作
2020/09/09 Javascript
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
2017/04/17 Python
Python 实现购物商城,含有用户入口和商家入口的示例
2017/09/15 Python
浅谈python数据类型及类型转换
2017/12/18 Python
Python设计模式之策略模式实例详解
2019/01/21 Python
python判断字符串或者集合是否为空的实例
2019/01/23 Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
2019/02/20 Python
采用专利算法搜索最廉价的机票:CheapAir
2016/09/10 全球购物
巴西24小时在线药房:Droga Raia
2020/05/12 全球购物
什么是抽象
2015/12/13 面试题
汽车专业毕业生推荐信
2013/11/12 职场文书
汽车技术服务与营销专业推荐信
2013/11/29 职场文书
群众路线剖析材料
2014/02/02 职场文书
高中课程设置方案
2014/05/28 职场文书
建筑安全标语
2014/06/07 职场文书
社区服务活动小结
2014/07/08 职场文书
小学生纪念九一八事变演讲稿
2014/09/14 职场文书
社区扶贫帮困工作总结
2015/05/20 职场文书