`
爱的轨迹
  • 浏览: 9285 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

jquery 去掉任何地方空格的大集合

阅读更多

首先     var a = a.replace(/[ ]/g,"");试一下

 

实现1

String.prototype.trim = function() {
  return this.replace(/^/s/s*/, '').replace(//s/s*$/, '');
}

看起来不怎么样, 动用了两次正则替换,实际速度非常惊人,主要得益于浏览器的内部优化。一个著名的例子字符串拼接,直接相加比用Array做成的StringBuffer 还快。base2类库使用这种实现。
实现2

String.prototype.trim = function() {
  return this.replace(/^/s+/, '').replace(//s+$/, '');
}

和实现1 很相似,但稍慢一点,主要原因是它最先是假设至少存在一个空白符。Prototype.js使用这种实现,不过其名字为strip,因为 Prototype的方法都是力求与Ruby同名。
实现3

String.prototype.trim = function() {
  return  this.substring(Math.max(this.search(//S/), 0),this.search(//S/s*$/) + 1);
}

以截取方式取得空白部分(当然允许中间存在空白符),总共 调用了四个原生方法。设计得非常巧妙,substring以两个数字作为参数。Math.max以两个数字作参数,search则返回一个数字。速度比上 面两个慢一点,但比下面大多数都快。
实现4

String.prototype.trim = function() {
  return  this.replace(/^/s+|/s+$/g, '');
}

这个可以称得上实现2的简化版,就是 利用候选操作符连接两个正则。但这样做就失去了浏览器优化的机会,比不上实现3。由于看来很优雅,许多类库都使用它,如JQuery与mootools

实现5

String.prototype.trim = function() {
  var str = this;
  str = str.match(//S+(?:/s+/S+)*/);
  return str ? str[0] : '';
}

match 是返回一个数组,因此原字符串符合要求的部分就成为它的元素。为了防止字符串中间的空白符被排除,我们需要动用到非捕获性分组(?:exp)。由于数组可 能为空,我们在后面还要做进一步的判定。好像浏览器在处理分组上比较无力,一个字慢。所以不要迷信正则,虽然它基本上是万能的。

实现6

String.prototype.trim = function() {
  return this.replace(/^/s*(/S*(/s+/S+)*)/s*$/, '$1');
}

把符合要求的部分提供出来,放到一个空字符串中。不过效率很差,尤其是在IE6中。
实现7

String.prototype.trim = function() {
  return this.replace(/^/s*(/S*(?:/s+/S+)*)/s*$/, '$1');
}

和实现6很相似,但用了非捕获分组进行了优点,性能效之有一点点提升。

实现8

String.prototype.trim = function() {
  return this.replace(/^/s*((?:[/S/s]*/S)?)/s*$/, '$1');
}

沿着上面两个的思路进行改进,动用了非捕获分组与字符集合,用?顶替了*,效果非常惊人。尤其在IE6中,可 以用疯狂来形容这次性能的提升,直接秒杀火狐。

实现9

String.prototype.trim = function() {
  return this.replace(/^/s*([/S/s]*?)/s*$/, '$1');
}

这次是用懒惰匹配 顶替非捕获分组,在火狐中得到改善,IE没有上次那么疯狂。

实现10

String.prototype.trim = function() {
  var str = this,
  whitespace = ' /n/r/t/f/x0b/xa0/u2000/u2001/u2002/u2003/u2004/u2005/u2006/u2007/u2008/u2009/u200a/u200b/u2028/u2029/u3000';
  for (var i = 0,len = str.length; i < len; i++) {
    if (whitespace.indexOf(str.charAt(i)) === -1) {
      str = str.substring(i);
      break;
    }
  }
  for (i = str.length - 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 : '';
}

我 只想说,搞出这个的人已经不是用牛来形容,已是神一样的级别。它先是把可能的空白符全部列出来,在第一次遍历中砍掉前面的空白,第二次砍掉后面的空白。全 过程只用了indexOf与substring这个专门为处理字符串而生的原生方法,没有使用到正则。速度快得惊人,估计直逼上内部的二进制实现,并且在 IE与火狐(其他浏览器当然也毫无疑问)都有良好的表现。速度都是零毫秒级别的。
实现11

String.prototype.trim = function() {
  var str = this,
  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;
}

实现10已经告诉我们普通的原生字符串截取方法是远胜于正则替换,虽然是复杂一点。但只要正则 不过于复杂,我们就可以利用浏览器对正则的优化,改善程序执行效率,如实现8在IE的表现。我想通常不会有人在项目中应用实现10,因为那个 whitespace 实现太长太难记了(当然如果你在打造一个类库,它绝对是首先)。实现11可谓其改进版,前面部分的空白由正则替换负责砍掉,后面用原生方法处理,效果不逊 于原版,但速度都是非常逆天。
实现12

String.prototype.trim = function() {
  var str = this,
  str = str.replace(/^/s/s*/, ''),
  ws = //s/,
  i = str.length;
  while (ws.test(str.charAt(--i)));
  return str.slice(0, i + 1);
}

实现10与实现11在写法上更好的改进版,注意说的不是性能速 度,而是易记与使用上。和它的两个前辈都是零毫秒级别的,以后就用这个来工作与吓人。

分享到:
评论

相关推荐

    js 去掉字符串前后空格实现代码集合

    - jQuery库提供了一个`$.trim(str)`函数,它使用正则表达式`/^\s+|\s+$/g`来去除字符串的首尾空格。jQuery内部实现是通过`replace`方法替换掉字符串前后可能出现的空格或不间断空格(`\u00A0`)。 4. 使用 ...

    jquery.min.js jquery-1.5.1.js

    标题中的“jquery.min.js”是jQuery的压缩版,它去除了注释和不必要的空格,体积更小,适合生产环境使用。而“jquery-1.5.1.js”则是未压缩的完整版本,包含了更多的调试信息,更适合开发阶段。 四、jQuery-1.5.1...

    jquery各种版本 从1.0---&gt;7.2(包括mini版、完整版)大收藏

    - 迷你版(minified version):经过压缩和优化,去除了空格和注释,体积小,适用于生产环境,以减少页面加载时间。 - 完整版(full version):保留了原始代码的格式和注释,便于阅读和调试,通常在开发阶段使用...

    JQuery自学第二天.docx

    其他JQuery静态方法如`$.trim()`用于去除字符串两端的空格,`$.isWindow()`检查对象是否为`window`对象,`$.isArray()`检测是否为真数组,`$.isFunction()`则用来判断是否为函数。 `$.holdReady()`是一个特殊的方法...

    jquery-2.1.1

    这个版本的代码经过了混淆和去除空格、换行等处理,使得文件体积更小,但功能上与未压缩版完全一致。 jQuery 2.1.1相对于之前的版本,主要提升了性能,修复了一些已知的bug,并且对jQuery的API进行了一些微调。例如...

    gQuery : jQuery DOM 操作部分

    在压缩并去除空格后,其大小不足4KB,这使得它在对页面加载时间敏感的场景下具有显著优势。尽管体积小巧,但gQuery依然保留了jQuery中许多常用的DOM操作方法,如选择元素、遍历DOM树、添加/删除样式、处理事件等,极...

    jQuery struts2 hibernate

    - **空格过滤**:`$.trim()` 可以去除字符串两端的空白字符。 #### 八、Ajax技术 1. **定义**: - **概念**:Ajax (Asynchronous JavaScript and XML),即异步的 JavaScript 和 XML 技术,允许网页在不重新加载的...

    jQuery完全实例.rar

    jQuery1.2 API 中文版折叠展开折叠全部展开全部 英文说明 核心jQuery 核心函数 jQuery(expression,[context]) jQuery(expression,[context]) 这个函数接收一个包含 CSS 选择器的字符串,然后用这个字符串去匹配一组...

    JQuery判断是否为空.rar

    这里使用了`trim()`方法去除两端的空白字符,防止因空格导致误判。 3. **HTML内容为空** - `html()`方法:类似地,如果你想检查元素的HTML内容(包括子元素)是否为空,可以使用`html()`方法。 ```javascript ...

    jQuery数组处理函数整理

    1. **$.trim(value)**: 这个函数用于去除字符串两端的空白字符,包括空格、制表符和换行符。在处理数组时,如果数组元素是字符串,可以用此函数来清理不必要的空白。 2. **$.each(container, callback)**: 这是一个...

    jQuery源码解读之removeClass()方法分析

    如果传递了value,将移除匹配的类名后剩余的类名赋值给finalValue,然后将当前元素的class属性设置为finalValue值,此时会去掉字符串两端的空格,避免在元素类名中出现不必要空格。这样,该元素就只剩下那些未被移除...

    前端功能性插件集合

    * $.ckTrim(str),返回值为去掉前后空格 str: jquery对象||元素ID||字符串 * $.ckIsEmail(str, ifAlert),返回是否为正确邮箱格式 str: jquery对象||元素ID||字符串 ifAlert: 是否弹出错误信息 * $.ckIsUrl(str, ...

    jQuery实用函数用法总结

    这个函数非常实用,特别是在处理表单输入时,它能够帮助开发者去除多余的空格,保证数据的准确性。 遍历集合是编程中常见的任务,jQuery提供了一个名为$.each()的函数,可以用来遍历数组或对象。在遍历数组时,$....

    jQuery实现鼠标经过图片预览大图效果

    ### jQuery实现鼠标经过图片预览大图效果知识点 #### jQuery简介 jQuery是一个快速、小巧、功能丰富的JavaScript库。它通过减少JavaScript编程中的代码量,简化了HTML文档遍历、事件处理、动画和Ajax交互的过程。...

    jquery $.trim()方法使用介绍

    - 具体来说,它检查字符串的第一个和最后一个字符是否属于一个预定义的空白字符集合(包括空格、制表符、换行符等),如果是,则从字符串中移除这些字符。 5. **常见使用场景:** - 在处理用户输入的表单数据时,...

    jQuery使用each遍历循环的方法

    // 获取元素值并去除空格 if (monthVal.length &gt; 0) { // 如果值非空 monthMoney = accAdd(monthMoney, monthVal); // 累加到总金额中 } }); if (monthMoney &gt; totalMoney) { // 如果总金额超过预设值 alert...

    jQuery自带的一些常用方法总结

    jQuery是一个快速、小巧、功能丰富的...这些方法都是jQuery库的一部分,能够在处理DOM、数据集合以及各种常见的编程任务时提供极大的便利。通过掌握这些方法,开发者可以更加高效地编写出既健壮又易于维护的代码。

Global site tag (gtag.js) - Google Analytics