String.prototype.trim = function (trim = function (trim = function >return this .replace(/^s*([Ss]*?)s*$/, '$1' );
}
String.prototype.trim = function (trim = function (trim = function >var str = this ,
whitespace = ' nrtfx0bxa0u2000u2001u2002u2003u2004u20 05u2006u2007u2008u2009u200au20020F str.length; 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與火狐(其它瀏覽器當然也毫無疑問)都有傑出的表現。速度都是零毫秒另外。
while (ws. test(str.charAt(--i)));
return str.slice(0, i 1);
}
实现10与实现11在写法上更好的改进版,注意说的不是性能速度,而是易记与施用上。和它的两个先辈都是零毫秒级另外,以后就用这个来工作与吓人。
下面是老外给出的比力结果,执行背景是对Magna Carta 这文章(超过27,600字符)进行trim操作。
实现 Firefox 2 IE 6
trim1 15ms trim2 31ms trim3 46ms 31ms
trim4 47ms 46ms
trim5 156ms 1656ms
trim6 172ms 2406ms
trim7 172ms 1640ms
trim8 281ms trim9 125ms 78ms
trim10 trim11 trim12 trim函数实现揭晓自己的想法,想懂得原作者说什么请看原文。
JS 去除空格的方法目前共有 12 種:
實作 1
String.prototype.trim = function() { return this.replace(/^ss*/, '' ).replace(/ss*$/, ''); }
實作2
String.prototype.trim = function() { return this.replace(/^s /, '').replace(/s $/, ''); }
實作3
String.prototype.trim = function() { return this.s string(Math.max(this.search(/S/), 0),this.search(/Ss*$/ ) 1); }
實作4
String.prototype.trim = function() { return this.replace(/^s |s $/g, ''); }
String.prototype.trim = function() { var str = this; str = str.match(/S (?:s S )*/);回傳 str ?字串[0]:''; }
String.prototype.trim = function() { return this.replace(/ ^s*(S*(s S )*)s*$/, '$1'); }
實作7
String.prototype.trim = function() { return this.replace(/^s*(S*(?:s S )*)s*$/, '$1'); }
String.prototype.trim = function() { return this.replace(/^s*((?:[Ss]*S)?)s*$/, '$1'); }
String.prototype.trim = function() { return this.replace(/^s*([Ss]*?)s*$/, '$1'); }
String.prototype.trim = function() { var str = this,whitespace = ' nrtfx0bxa0??????????????? '; for (var i = 0,len = str.length; i = 0; i--) { if (whitespace.indexOf(str.charAt(i)) === -1) { str = str.s string( 0, 我1);休息;回傳whitespace.indexOf(str.charAt(0)) === -1 ?字串:''; }
實作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.s string(0, i 1 ) ;休息;返回str; }
實作12
String.prototype.trim = function() { var str = this, str = str.replace(/^ss*/, ''), ws = /s /, i = str.長度; while (ws.test(str.charAt(--i)));回傳str.slice(0, i 1); }
看起來不太怎麼樣,動用了兩次正規替換,實際上速度非常驚人,主要得益於瀏覽器的內部優化。實作。都是力求與Ry同名。 max以兩個數字作參數,搜尋則回傳一個數字。操作符連接兩個則。
符合是傳回一個陣列因此,原字串符合要求的部分就成為它的元素。由於備份可能崩潰,我們在後面還需要進一步的對策。 🎜>
把符合要求的提供部分拿出來,放到一個空字符串中。 不過效率很差,尤其是在IE6中。分組進行了優點,性能效率之有一點點提升。 *,效果非常驚人。包,在火狐中得到改善,IE上次沒有那麼瘋狂。等級了。使用到正則。 🎜>實現10已經告訴我們普通的清晰弦截取方法是遠勝於正則替換,雖然是複雜一點。的表現中實現8。實現11可謂其改進版,前面部分的空白由正則替換負責砍掉,後面用原生方法處理,效果不遜 於原版,但速度都是非常逆天。
實現10與實現11在寫法上更好的改良版,注意說的不是性能速 度,而是易記與使用上。和它的兩個前輩都是零毫秒等級的,以後就用這個來工作與嚇人。