裁剪字符串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 相关文章推荐
线路分流自动跳转代码;希望对大家有用!
Dec 02 Javascript
JavaScript更改class和id的方法
Oct 10 Javascript
JavaScript 拾漏补遗
Dec 27 Javascript
Jquery在指定DIV加载HTML示例代码
Feb 17 Javascript
js实现iframe跨页面调用函数的方法
Dec 13 Javascript
jquery.Callbacks的实现详解
Nov 30 Javascript
Angular4自制一个市县二级联动组件示例
Nov 21 Javascript
WebSocket的通信过程与实现方法详解
Apr 29 Javascript
vue+elementUI动态生成面包屑导航教程
Nov 04 Javascript
JavaScript(js)处理的HTML事件、键盘事件、鼠标事件简单示例
Nov 19 Javascript
原生JS与JQ获取元素的区别详解
Feb 13 Javascript
详解Vue3使用axios的配置教程
Apr 29 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 各种应用乱码问题的解决方法
2010/05/09 PHP
简单实用的网站PHP缓存类实例
2014/07/18 PHP
Yii框架关联查询with用法分析
2014/12/02 PHP
jquery之Document元素选择器篇
2008/08/14 Javascript
jquery选择符快速提取web表单数据示例
2014/03/27 Javascript
使用GruntJS构建Web程序之安装篇
2014/06/04 Javascript
jquery实现textarea 高度自适应
2015/03/11 Javascript
jquery 实现输入邮箱时自动补全下拉提示功能
2015/10/04 Javascript
Javascript 引擎工作机制详解
2016/11/30 Javascript
js图片轮播手动切换特效
2017/01/12 Javascript
ES6中Symbol类型用法实例详解
2017/04/06 Javascript
webpack中使用iconfont字体图标的方法
2018/02/22 Javascript
浅谈React组件之性能优化
2018/03/02 Javascript
vue iview组件表格 render函数的使用方法详解
2018/03/15 Javascript
angularjs 的数据绑定实现原理
2018/07/02 Javascript
javascript实现的图片预览和上传功能示例【兼容IE 9】
2020/05/01 Javascript
vue实现匀速轮播效果
2020/06/29 Javascript
Vue如何跨组件传递Slot的实现
2020/12/14 Vue.js
介绍Python中几个常用的类方法
2015/04/08 Python
浅谈Python 集合(set)类型的操作——并交差
2016/06/30 Python
Python脚本实现12306火车票查询系统
2016/09/30 Python
django认证系统实现自定义权限管理的方法
2018/07/16 Python
详解python的变量缓存机制
2021/01/24 Python
CSS3实现背景透明文字不透明的示例代码
2018/06/25 HTML / CSS
联想澳大利亚官网:Lenovo Australia
2018/01/18 全球购物
如何写出高质量、高性能的MySQL查询
2014/11/17 面试题
医学生实习自我鉴定
2013/09/27 职场文书
委托书范本
2014/04/02 职场文书
12岁生日演讲稿
2014/05/14 职场文书
学校安全教育月活动总结
2014/07/07 职场文书
村主任个人对照检查材料
2014/10/01 职场文书
2014年工会工作总结
2014/11/12 职场文书
装修公司管理制度
2015/08/05 职场文书
2016孝老爱亲模范事迹材料
2016/02/26 职场文书
2019年感恩励志演讲稿(收藏备用)
2019/09/11 职场文书
Go语言并发编程 sync.Once
2021/10/16 Golang