裁剪字符串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 相关文章推荐
[HTML/CSS/Javascript]WWTJS
Sep 25 Javascript
js调用flash的效果代码
Apr 26 Javascript
Whatever:hover 无需javascript让IE支持丰富伪类
Jun 29 Javascript
教你如何使用PHP输出中文JSON字符串
May 22 Javascript
微信分享的标题、缩略图、连接及描述设置方法
Oct 14 Javascript
js获取url传值的方法
Dec 18 Javascript
js实现正则匹配中文标点符号的方法
Dec 23 Javascript
基于Bootstrap实现tab标签切换效果
Apr 15 Javascript
微信小程序中button组件的边框设置的实例详解
Sep 27 Javascript
JS实现的简单下拉框联动功能示例
May 11 Javascript
性能优化篇之Webpack构建速度优化的建议
Apr 03 Javascript
JavaScript代码实现简单计算器
Dec 27 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
snoopy PHP版的网络客户端提供本地下载
2008/04/15 PHP
PHP生成Flash动画的实现代码
2010/03/12 PHP
Laravel学习教程之request validation的编写
2017/10/25 PHP
WordPress JQuery处理沙发头像
2009/06/22 Javascript
stream.js 一个很小、完全独立的Javascript类库
2011/10/28 Javascript
js 调用父窗口的具体实现代码
2013/07/15 Javascript
jquery 按键盘上的enter事件
2014/05/11 Javascript
跟我学习javascript的arguments对象
2015/11/16 Javascript
在 Express 中使用模板引擎
2015/12/10 Javascript
开启BootStrap学习之旅
2016/05/04 Javascript
BootStrap无限级分类(无限极分类封装版)
2016/08/26 Javascript
Jquery与Bootstrap实现后台管理页面增删改查功能示例
2017/01/22 Javascript
JavaScript学习笔记之惰性函数示例详解
2017/08/27 Javascript
使用Vue动态生成form表单的实例代码
2018/04/26 Javascript
Angular5.0 子组件通过service传递值给父组件的方法
2018/07/13 Javascript
微信小程序修改swiper默认指示器样式的实例代码
2018/07/18 Javascript
vue+Vue Router多级侧导航切换路由(页面)的实现代码
2018/12/20 Javascript
js重写alert事件(避免alert弹框标题出现网址)
2020/12/04 Javascript
python操作redis的方法
2015/07/07 Python
Python队列的定义与使用方法示例
2017/06/24 Python
Python爬虫常用小技巧之设置代理IP
2018/09/13 Python
python 含子图的gif生成时内存溢出的方法
2019/07/07 Python
让你的Python代码实现类型提示功能
2019/11/19 Python
python+selenium+Chrome options参数的使用
2020/03/18 Python
python中rc1什么意思
2020/06/19 Python
Django后端按照日期查询的方法教程
2021/02/28 Python
CSS3媒体查询Media Queries基础学习教程
2016/02/29 HTML / CSS
Perfume’s Club中文官网:西班牙美妆在线零售品牌
2020/08/24 全球购物
培根随笔读书笔记
2015/07/01 职场文书
药房管理制度范本
2015/08/06 职场文书
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
2021/04/27 Python
总结Python常用的魔法方法
2021/05/25 Python
python中%格式表达式实例用法
2021/06/18 Python
SQL注入详解及防范方法
2021/12/06 MySQL
JavaScript实例 ODO List分析
2022/01/22 Javascript
海贼王十大逆天果实 魂魂果实上榜,岩浆果实攻击力最强
2022/03/18 日漫