`
geweixin
  • 浏览: 39662 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
文章分类
社区版块
存档分类
最新评论

javaScript空格清理(全)

阅读更多
 JavaScript trim函数大赏

W3C那帮人的脑袋被驴踢了,直到javascript1.8.1才支持trim函数(与trimLeft,trimRight),可惜现在只有firefox3.5支持。由于去除字符串两边的空白实在太常用,各大类库都有它的影子。加之,外国人都很有研究精神,搞鼓了相当多实现。
实现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在写法上更好的改进版,注意说的不是性能速度,而是易记与使用上。和它的两个前辈都是零毫秒级别的,以后就用这个来工作与吓人。

下面是老外给出的比较结果,执行背景是对Magna Carta 这文章(超过27,600字符)进行trim操作。
分享到:
评论

相关推荐

    javascript将字符串中的多个空格替换为一个空格的正则实例.docx

    特别是在用户输入或者文本处理过程中,常常会遇到需要清理字符串中的多余空格的情况。例如,当从表单中获取用户输入时,字符串可能会包含连续的多个空格,这些空格在显示时不仅会造成视觉上的不整洁,还可能影响到...

    javascript中使用正则表达式实现删除字符串中的前后空格

    在JavaScript中,处理字符串是一个常见的任务,特别是在开发前台应用程序时。用户输入的内容往往包含不必要的空格...通过使用正则表达式,开发者可以轻松地删除字符串中的前后空格,或在用户输入时进行格式验证和清理。

    javascript 取Url参数和去掉字符串前后空格方法

    ### JavaScript 获取URL参数和去除字符串前后空格的方法 在日常的Web开发中,经常会遇到需要获取URL中的参数或处理字符串的情况。例如,在用户点击某个链接或者表单提交后,我们可能需要从URL中提取出某些特定的...

    JavaScript去除空格的三种方法(正则/传参函数/trim)

    在进行JavaScript编程时,去除字符串中的空格是一个常见的需求。这可以在数据处理、表单验证或在用户输入时清理字符串等场景中使用。本文将详细介绍在JavaScript中去除字符串中空格的三种方法,包括使用正则表达式、...

    几个Javascript的小工具

    在JavaScript编程中,有时我们需要对数据进行特定的处理,例如检查数据类型、处理数值精度、去除字符串中的空格等。以下是一些JavaScript小工具,它们分别用于判断是否为日期型数据、保留小数点精度、四舍五入、以及...

    javascript去除字符串左右两端的空格

    在JavaScript中,去除字符串两端的空格是字符串处理中的一个基本需求,它涉及到字符串的格式化和数据清洗。字符串在前端界面显示或后端数据处理时常常需要去除不必要的空白字符,以确保数据的准确性或符合界面的布局...

    常用Javascript正则表达式汇总

    JavaScript中的正则表达式是一种强大的文本处理工具,用于在字符串中进行模式匹配和搜索替换。以下是一些常见的JavaScript正则表达式及其应用: 1. **匹配中文字符**:`[\u4e00-\u9fa5]` 这个正则表达式用于匹配...

    javascript的事件大全

    - onKeyPress:当用户按下并释放一个键时触发,通常用于检测特殊键(如回车、空格)的按下。 - onKeyDown:当用户按下键盘上的任意键时触发,可用于实现快捷键功能。 - onKeyUp:当用户释放键盘上的键时触发,与...

    JavaScript操作表格

    ### JavaScript操作表格知识点详解 #### 一、创建表格 在给定的内容中,我们首先看到了一个简单的示例,展示了如何使用JavaScript动态创建一个表格。这个过程主要包括以下几个步骤: 1. **获取容器元素**:通过`...

    javascript 格式化工具

    JavaScript格式化工具可以自定义缩进(使用空格或制表符)、行宽限制、大括号样式(K&R、Allman、GNU等)以及其他编码约定。例如,`debug.css`可能包含了用于调试时显示代码样式的CSS规则,`debugInner.file`可能是...

    JavaScript,HTML制作简易图形化界面计算器

    这可能包括清理非数字字符,处理前导或尾随的空格,以及识别和处理负数。 - **运算逻辑**:编写函数处理加、减、乘、除运算。这些函数应该能处理各种情况,包括除以零的异常,以及正负数的混合运算。 - **错误处理...

    JavaScript格式化工具

    JavaScript格式化工具是一种用于优化和清理JavaScript代码的实用程序,旨在提高代码的可读性和可维护性。在编程过程中,代码可能会因为各种原因变得混乱,例如手动缩进错误、不必要的空格或换行等。此时,JavaScript...

    JSer javascript格式化

    5. **去除空格和注释**:清理代码中的多余空格和注释,便于阅读和分析。 6. **代码排序**:根据一定的规则排序函数、变量声明和导入模块。 7. **ESLint集成**:与ESLint等代码检查工具配合,自动修复编码风格问题...

    JSMin js注释清理及压缩工具下载

    JSMin的主要功能是删除JavaScript代码中的不必要的字符,如注释、空格和换行,以及通过合并相邻的字符串字面量来进一步压缩代码。 在前端开发中,优化资源加载速度是非常重要的,因为这直接影响到用户的体验。JSMin...

    字符串去掉前后空格的网页源代码.zip

    1. **JavaScript**:JavaScript 是前端开发的主要语言,其内置的 `trim()` 方法可以轻松去除字符串两端的空格。例如: ```javascript let str = " Hello, World! "; str = str.trim(); console.log(str); // 输出 ...

    javascript中使用正则表达式删除前后空格的方法

    - 在数据库操作前清理数据,以防止不必要的空格引发的数据不一致问题。 - 在Web前端开发中,处理从HTML元素(如`&lt;input&gt;`)中获取的字符串数据。 以上内容详细介绍了在JavaScript中使用正则表达式删除字符串前后...

    Javascript代码检视规范

    这些规范通常包含对缩进、空格、括号放置等方面的指导,比如使用2个空格作为缩进,函数参数之间和操作符周围添加空格等。 为了自动化代码检视过程,我们可以借助一些工具,例如ESLint。这是一个可配置的静态代码...

    JavaScript-HTML格式化 加密解密

    JavaScript是一种广泛应用于网页和网络应用的编程语言,它在客户端运行,为用户提供动态交互体验。在HTML页面中,JavaScript可以用于处理数据、控制浏览器行为、创建动画效果、发送异步请求(Ajax)以及进行各种形式...

    删除MarkDown文档中的 U+200B 零宽度空格字符(Typora中显示红点),格式化MD文件

    除了使用此工具外,你还可以使用其他文本编辑器或编程语言(如Python、JavaScript等)编写脚本来实现相同功能。对于大型项目,编写自定义脚本可能更为灵活,可以按需调整清理规则。 总的来说,了解如何识别和处理...

    jquery Word 格式整理去掉无用空格和首行缩进效果代码

    在IT行业中,jQuery是一款非常流行的JavaScript库,它简化了HTML文档遍历、事件处理、...在实际项目中,根据具体需求和环境,可能还需要结合其他技术,如服务器端处理或专门的文本处理库,来实现更全面的格式清理功能。

Global site tag (gtag.js) - Google Analytics