裁剪字符串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 UI Dialog的样式设置问题
Dec 18 Javascript
node.js中的http.response.write方法使用说明
Dec 14 Javascript
jquery延迟对象解析
Oct 26 Javascript
浅谈js对象属性 通过点(.) 和方括号([]) 的不同之处
Oct 29 Javascript
HTML5基于Tomcat 7.0实现WebSocket连接并实现简单的实时聊天
Oct 31 Javascript
JavaScript实现解析INI文件内容的方法
Nov 17 Javascript
概述jQuery的元素筛选
Nov 23 Javascript
angular2路由切换改变页面title的示例代码
Aug 23 Javascript
webpack学习教程之前端性能优化总结
Dec 05 Javascript
socket在egg中的使用实例代码详解
May 30 Javascript
JS常用排序方法实例代码解析
Mar 03 Javascript
VUE+elementui组件在table-cell单元格中绘制微型echarts图
Apr 20 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
PHP简介
2006/10/09 PHP
PHP图片上传类带图片显示
2006/11/25 PHP
MySQL数据源表结构图示
2008/06/05 PHP
Extjs 几个方法的讨论
2010/01/28 Javascript
JS模拟面向对象全解(二、类型与赋值)
2011/07/13 Javascript
jQuery中使用了document和window哪些属性和方法小结
2011/09/13 Javascript
那些年,我还在学习jquery 学习笔记
2012/03/05 Javascript
jquery序列化form表单使用ajax提交后处理返回的json数据
2014/03/03 Javascript
jquery关于事件冒泡和事件委托的技巧及阻止与允许事件冒泡的三种实现方法
2015/11/27 Javascript
基于Vue.js实现简单搜索框
2020/03/26 Javascript
微信小程序 MD5的方法详解及实例代码
2017/03/10 Javascript
jQuery阻止移动端遮罩层后页面滚动
2017/03/15 Javascript
为你的微信小程序体积瘦身详解
2017/05/20 Javascript
Node.js如何实现注册邮箱激活功能 (常见)
2017/07/23 Javascript
Bootstrap 按钮样式与使用代码详解
2018/12/09 Javascript
浅析Vue 中的 render 函数
2020/02/28 Javascript
vue webpack build资源相对路径的问题及解决方法
2020/06/04 Javascript
Python抓取框架 Scrapy的架构
2016/08/12 Python
Python 列表去重去除空字符的例子
2019/07/20 Python
python 默认参数相关知识详解
2019/09/18 Python
python3-flask-3将信息写入日志的实操方法
2019/11/12 Python
python统计字符的个数代码实例
2020/02/07 Python
利用PyTorch实现VGG16教程
2020/06/24 Python
python爬取网易云音乐热歌榜实例代码
2020/08/07 Python
HTML5之SVG 2D入门2—图形绘制(基本形状)介绍及使用
2013/01/30 HTML / CSS
在线购买澳大利亚设计师手拿包和奢华晚装手袋:Olga Berg
2019/03/20 全球购物
工作的心得体会
2013/12/31 职场文书
财务学生的职业生涯发展
2014/02/11 职场文书
小区推广策划方案
2014/06/06 职场文书
对党的十八届四中全会的期盼
2014/10/17 职场文书
2015年教师新年寄语
2014/12/08 职场文书
高中教师个人工作总结
2015/02/10 职场文书
浅谈JS和Nodejs中的事件驱动
2021/05/05 NodeJs
利用Matlab绘制各类特殊图形的实例代码
2021/07/16 Python
SQL Server数据库基本概念、组成、常用对象与约束
2022/03/20 SQL Server
我收到了德劲DE1107
2022/04/05 无线电