裁剪字符串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 选项卡效果(JS与HTML的分离)
Apr 01 Javascript
jquery调用asp.net 页面后台的实现代码
Apr 27 Javascript
JavaScript 继承使用分析
May 12 Javascript
javaScript面向对象继承方法经典实现
Aug 20 Javascript
判断访客终端类型集锦
Jun 05 Javascript
JavaScript计算某一天是星期几的方法
Aug 05 Javascript
JS验证逗号隔开可以是中文字母数字
Apr 22 Javascript
使用JQuery中的trim()方法去掉前后空格
Sep 16 Javascript
Bootstrap实现带暂停功能的轮播组件(推荐)
Nov 25 Javascript
react实现菜单权限控制的方法
Dec 11 Javascript
javascript简单实现深浅拷贝过程详解
Oct 08 Javascript
解决antd Form 表单校验方法无响应的问题
Oct 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
虫族 Zerg 魔法科技
2020/03/14 星际争霸
刷新时清空文本框内容的js代码
2007/04/23 Javascript
jQuery select控制插件
2009/08/17 Javascript
学习ExtJS Window常用方法
2009/10/07 Javascript
JavaScript Object的extend是一个常用的功能
2009/12/02 Javascript
javascript设计模式 接口介绍
2012/07/24 Javascript
写JQuery插件的基本知识
2013/11/25 Javascript
setInterval计时器不准的问题解决方法
2014/05/08 Javascript
JavaScript中继承用法实例分析
2015/05/16 Javascript
深入理解JavaScript的React框架的原理
2015/07/02 Javascript
JS实现从顶部下拉显示的带动画QQ客服特效代码
2015/10/24 Javascript
基于jQuery实现美观且实用的倒计时实例代码
2015/12/30 Javascript
基于BootStrap Metronic开发框架经验小结【五】Bootstrap File Input文件上传插件的用法详解
2016/05/12 Javascript
关于bootstrap日期转化,bootstrap-editable的简单使用,bootstrap-fileinput的使用详解
2017/05/12 Javascript
JS简单实现点击跳转登陆邮箱功能的方法
2017/10/31 Javascript
Nodejs模块的调用操作实例分析
2018/12/25 NodeJs
vue 路由meta 设置导航隐藏与显示功能的示例代码
2020/09/04 Javascript
Pyhton中防止SQL注入的方法
2015/02/05 Python
python类和函数中使用静态变量的方法
2015/05/09 Python
Python中DJANGO简单测试实例
2015/05/11 Python
Python实现批量转换文件编码的方法
2015/07/28 Python
详解Python的Flask框架中生成SECRET_KEY密钥的方法
2016/06/07 Python
Python实现识别手写数字 简易图片存储管理系统
2018/01/29 Python
Python装饰器的执行过程实例分析
2018/06/04 Python
Python wxPython库消息对话框MessageDialog用法示例
2018/09/03 Python
python实现自动登录
2018/09/17 Python
解决Python pip 自动更新升级失败的问题
2020/02/21 Python
解释一下钝化(Swap out)
2016/12/26 面试题
党员民主生活会整改措施
2014/09/26 职场文书
学校机关党总支领导班子整改工作方案
2014/10/26 职场文书
群众路线自查报告及整改措施
2014/11/04 职场文书
2015商场元旦促销活动策划方案
2014/12/09 职场文书
2015年派出所民警工作总结
2015/04/24 职场文书
学校运动会加油词
2015/07/18 职场文书
导游词之苏州盘门景区
2019/11/12 职场文书
Redis主从复制操作和配置详情
2022/09/23 Redis