裁剪字符串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贪吃蛇完整版(源码)
Dec 09 Javascript
基于jQuery实现的QQ表情插件
Aug 25 Javascript
详解JavaScript基于面向对象之创建对象(2)
Dec 10 Javascript
JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)
Jun 02 Javascript
微信小程序 wx:key详细介绍
Oct 28 Javascript
js实现前端分页页码管理
Jan 06 Javascript
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
Aug 09 jQuery
Vim快速合并行及vim 将文件所有行合并到一行
Nov 27 Javascript
深入理解 Koa 框架中间件原理
Oct 18 Javascript
layui-table对返回的数据进行转变显示的实例
Sep 04 Javascript
Vue获取页面元素的相对位置的方法示例
Feb 05 Javascript
vue3.0实现点击切换验证码(组件)及校验
Nov 18 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 不错的学习资料
2009/02/06 PHP
php 获取mysql数据库信息代码
2009/03/12 PHP
PHP解决URL中文GBK乱码问题的两种方法
2014/06/03 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
2017/08/10 PHP
实例讲解PHP验证邮箱是否合格
2019/01/28 PHP
TNC vs RR BO3 第一场 2.14
2021/03/10 DOTA
form中限制文本字节数js代码
2007/06/10 Javascript
详解win7 cmd执行vue不是内部命令的解决方法
2017/07/27 Javascript
JavaScript编写棋盘覆盖代码详解
2017/08/28 Javascript
JavaScript中join()、splice()、slice()和split()函数用法示例
2018/08/24 Javascript
jQuery实现基本动画效果的方法详解
2018/09/06 jQuery
微信小程序实现tab左右切换效果
2020/11/15 Javascript
微信小程序与后台PHP交互的方法实例分析
2018/12/10 Javascript
[04:45]DOTA2上海特级锦标赛主赛事第四日RECAP
2016/03/06 DOTA
python使用any判断一个对象是否为空的方法
2014/11/19 Python
Python验证文件是否可读写代码分享
2017/12/11 Python
Python中一行和多行import模块问题
2018/04/01 Python
Python堆排序原理与实现方法详解
2018/05/11 Python
python实战教程之自动扫雷
2018/07/13 Python
Python中的元组介绍
2019/01/28 Python
Python爬虫之UserAgent的使用实例
2019/02/21 Python
Python读取xlsx文件的实现方法
2019/07/04 Python
Python实现代码统计工具
2019/09/19 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
使用Python将xmind脑图转成excel用例的实现代码(一)
2020/10/12 Python
加拿大建筑和装修专家:Reno-Depot
2017/12/21 全球购物
JD Sports西班牙:英国领先的运动服装公司
2020/01/06 全球购物
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
为什么会有内存对齐
2016/10/10 面试题
建筑实习自我鉴定
2013/10/18 职场文书
大学生职业规划论文
2014/01/11 职场文书
学生打架检讨书
2014/02/14 职场文书
小学校园广播稿(3篇)
2014/09/19 职场文书
三严三实学习心得体会
2014/10/13 职场文书
用Python的绘图库(matplotlib)绘制小波能量谱
2021/04/17 Python
MySQL中VARCHAR与CHAR格式数据的区别
2021/05/26 MySQL