js语言扩展之trim
trim, 作用是去除字符串左右两边的空白字符, 我们肯定不会陌生.
由于原生的String.prototype.trim支持并不广泛, 所以还是要自己实现.
下面是收集的各种实现方法, 作为学习之用.
1.先去除开头的, 再去除结尾的
function trim(str) {return str.replace(/^\s\s*/, '').replace(/\s*\s$/, '');
}
2.和版本1相似,不过比1慢一些,主要原因是它假设至少存在一个空白字符. Prototype.js
中用的是它, 不过叫strip
.
function trim(str) {return str.replace(/^\s+/, '').replace(/\s+$/, '');
}
3.比上面两个慢一些
function trim(str) {return str.substring(Math.max(str.search(/\S/), 0),str.search(/\S\s*$/ + 1));
}
4.早期的jquery中使用它, 也是本人喜欢的方式, 看起来很优雅. 但不如3快一些.
function trim(str) {return str.replace(/^\s+|\s+$/g, '');
}
5.利用String.prototype.match, 慢
function trim(str) {str = str.match(/\S+(?:\s+\S+)*/);return str ? str[0] : '';
}
6.据说在IE6下很慢, 不过我没见过IE6…
function trim(str) {return str.replace(/^\s*(\S*(\s+\S+)*)\s*$/, '$1');
}
7.在6上加非捕获性分组, 比6快一些
function trim(str) {return str.replace(/^\s*(\S*(?:\s+\S+)*)\s*$/, '$1');
}
8.据说在IE6下, 效果比6, 7快很多, 秒杀FF3
function trim(str) {return str.replace(/^\s*((?:[\S\s]*\S)?)\s*$/, '$1');
}
9.使用懒惰匹配代替非捕获性分组, 在ff下有所改善, 在ie下不如8那么快
function trim(str) {return str.replace(/^\s*([\S\s]*?)\s*$/, '$1');
}
10.源自PHP.js(改编自http://locutus.io/php/strings/trim/), 与php的trim函数用起来一致
// example 1: trim(' Kevin van Zonneveld ')
// returns 1: 'Kevin van Zonneveld'
// example 2: trim('Hello World', 'Hdle')
// returns 2: 'o Wor'
// example 3: trim(16, 1)
// returns 3: '6'
function trim(str, charlist) {// 列举所有可能的空白字符var whitespace = ' \n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000';var l = 0; // 长度var i = 0; // 循环索引str += ''; // 转字符串// 自定义要删除的字符if (charlist) {whitespace = (charlist + '').replace(/([[\]().?/*{}+$^:])/g, '$1')}l = str.length;// 从头删除空白字符for (i = 0; i < l; i++) {if (whitespace.indexOf(str.charAt(i)) === -1) {str = str.substring(i);break;}}// 重新计算长度l = str.length;// 从尾部删除空白字符for (i = l - 1; i >= 0; i--) {if (whitespace.indexOf(str.charAt(i)) === -1) {str = str.substring(0, i + 1)break}}// 再次确保return whitespace.indexOf(str.charAt(0)) === -1 ? str : ''
}
11.10的”压缩版”
function trim(str) {str = str.replace(/^\s+/, '');for (var i = str.length - 1; i >= 0; --i) {// 找到最后一个非空字符if (/\S/.test(str.charAt(i))) {str = str.substring(0, i + 1);break;}}return str;
}
12.比10好记, 性能差一些(书中有误)
function trim(str) {var str = str.replace(/^\s\s*/, '');ws = /\s/,i = str.length;// 找到最后一个非空白字符while (ws.test(str.charAt(--i))){// noop}return str.slice(0, i + 1);
}
13.据说比10慢, 比11, 12快, 不过处理的字符有限(书中有误)
function trim(str) {var len = str.length;for (var i = 0; str.charCodeAt(i) <= 32; ++i) {// noop}for (var j = len - 1; j > i && str.charCodeAt(j) <= 32; j--) {// noop}return str.slice(i, j + 1);
}
jquery从版本1.4以后, 把字符\u00A0
也加入了空白字符列表, 这是Prototype.js成员的发现.
总结: 最好的方案为10, 可根据需要自行选用.
参考:
* 《Javascript框架设计》(p40-p43)
* http://locutus.io/php/strings/trim/
欢迎补充指正!
js语言扩展之trim相关推荐
- javascript语言扩展:可迭代对象(3)
除了前2篇文章中描述的可迭代对象以外,在js语言扩展中的生成器对象,也可以作为可迭代对象. 这里用到一个新的关键字yield,该关键字在函数内部使用,用法和return类似,返回函数中的一个值:yie ...
- 用C语言扩展PHP功能
用C语言扩展PHP功能 建议读者群:熟悉c,linux,php PHP经过最近几年的发展已经非常的流行,而且PHP也提供了各种各样非常丰富的函数. 但有时候我们还是需要来扩展PHP.比如:我们自 ...
- R语言扩展包dplyr——数据清洗和整理
R语言扩展包dplyr--数据清洗和整理 标签: 数据R语言数据清洗数据整理 2015-01-22 18:04 7357人阅读 评论(0) 收藏 举报 分类: R Programming(11) ...
- ML之SVM:利用Js语言设计SVM算法(SMO算法+线性核/高斯核)
ML之SVM:利用Js语言设计SVM算法(SMO算法+线性核/高斯核) 目录 输出结果 设计思路 设计代码(部分代码) 输出结果 设计思路 设计代码(部分代码) var doTest = functi ...
- ML之RF:利用Js语言设计随机森林算法【DT之CART算法(gain index)】并应用随机森林算法
ML之RF:利用Js语言设计随机森林算法[DT之CART算法(gain index)]&并应用随机森林算法 目录 输出结果 设计思路 代码实现(部分代码) 输出结果 设计思路 代码实现(部分代 ...
- Python:C语言扩展
Python:C语言扩展 (2013-05-29 14:38:02) 转载▼ 标签: 杂谈 分类:Python 没有什么比对着书敲的代码仍然出错更令人沮丧了.<Python编程入门经典> ...
- 用C语言扩展Python的功能的实例
用C语言扩展Python的功能的实例 分类: C/C++ 编程技巧 Programes 2008-04-23 09:31 1232人阅读 评论(0)收藏 举报 python扩展语言cmethodsnu ...
- 小结两种在Python中导入C语言扩展库的方法
小结两种在Python中导入C语言扩展库的方法 分类: Pythoner2009-08-18 20:44 2563人阅读 评论(1) 收藏 举报 python扩展c语言importstring 一种是 ...
- python代码用c语言封装_使用C语言扩展Python程序的简单入门指引
一.简介 Python是一门功能强大的高级脚本语言,它的强大不仅表现在其自身的功能上,而且还表现在其良好的可扩展性上,正因如此,Python已经开始受到越来越多人的青睐,并且被屡屡成功地应用于各类大型 ...
最新文章
- 云计算&大数据 “下一幕”智能变革之力
- 多个VSTO解决方案间传输变量
- spring cloud全家桶_阿里架构师玩转spring全家桶(实战篇),附赠3本spring电子书...
- java中timer类包_Java~util包中Timer的使用, 演示cancel方法 和 对比schedule和scheduleAtFixedRate方法...
- php curl 批量,关于用php的curl批量抓取内容
- 服务器操作系统分两大类,服务器的操作系统分哪几类
- openstack中文文档
- 企业中该如何防止僵尸网络的入侵?
- 【JWT】JWT+HA256加密 Token验证
- (转)基于深度组合的选股策略
- 非参数统计的Python实现—— Kruskal-Wallis 单因素方差分析
- 酒店的月收入报表java_统计报表_宾馆明细收入报表
- MATLAB FFT与fftshift
- Ubuntu12.10 GT650M 混合显卡/双显卡驱动安装
- android测试篇(四)android专项测试之压力测试
- Spark MLlib矩阵分解源码分析
- Cleartext HTTP traffic to xxx not permitted解决
- 如何建立维基百科页面(Wikipedia)
- 同一wifi下小米电视无法投屏
- 在ASF根据事件(Event)下载SAR数据