js中删除空格的方法有很多。本文整理了12个实用方法,与大家分享。
实现1
string . prototype . trim=function(){
返回this.replace(/^ss*/,”)。替换(/ss*$/, );
}
看起来不太好。它采用两次常规替换,实际速度惊人,主要得益于浏览器内部优化。字符串拼接的一个著名例子,直接加法比数组做的StringBuffer快。Base2类库使用这种实现。
实现2
string . prototype . trim=function(){
返回this.replace(/^s /,“”)。替换(/s $/, );
}
它类似于1的实现,但是稍微慢一点,主要是因为它首先假设至少有一个空格存在。Prototype.js使用了这个实现,但是它的名字是strip,因为Prototype的方法都力求和Ruby同名。
实现3
string . prototype . trim=function(){
返回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)*/);
返回字符串?str[0]:“”;
}
Match返回一个数组,所以原始字符串中符合要求的部分成为它的元素。为了防止字符串中间的空格被排除,我们需要使用非捕获分组(?exp .由于数组可以是空的,我们必须在以后做进一步的决定。好像浏览器处理包比较弱,一个字慢。所以不要迷信规律性,虽然它基本上是万能的。
实现6
string . prototype . trim=function(){
return this.replace(/^s*(s*(s s)*) s * $/, $ 1 );
}
提供符合要求的部分,放在空字符串中。但是效率很差,尤其是IE6。
实现7
string . prototype . trim=function(){
返回this.replace(/^s*(S*(?s S )*)s*$/, $ 1 );
}
它非常类似于实现6,但是它利用了非捕获分组,并且它的性能有所提高。
实现8
string . prototype . trim=function(){
返回this.replace(/^s*((?[Ss]*S)?)s*$/, $ 1 );
}
沿着以上两个思路改进,使用非捕获分组和字符集,使用?替换*,效果惊人。尤其是在IE6中,这种性能提升可以用疯狂来形容,直接秒杀火狐。
实现9
string . prototype . trim=function(){
返回this.replace(/^s*([Ss]*?)s*$/, $ 1 );
}
这一次使用了惰性匹配来替换非捕获包,这在Firefox中得到了改进。IE没有上次那么疯狂。
实现10
string . prototype . trim=function(){
var str=this,
white space= n r t f x0b xa0 u 2000 u 2001 u 2002 u 2003 u 2004 u 2005 u 2006 u 2007 u 2008 u 2009 u 200a u 200b u 2028 u 2029 u 3000 ;
for (var i=0,len=str.length我leni ) {
if(white space . index of(str . charat(I))===-1){
str=str . substring(I);
打破;
}
}
for(I=str . length-1;I=0;我- ) {
if(white space . index of(str . charat(I))===-1){
str=str.substring(0,I 1);
打破;
}
}
return white space . index of(str . charat(0))===-1?字符串:“”;
}
我只想说,想出这个的人已经不是牛了,而是神一般的水平。首先,它列出了所有可能的空白字符,在第一次遍历中切断前面的空白,在第二次遍历中切断后面的空白。整个过程中只使用了indexOf和substring这两个专门为处理字符串而设计的原生方法,没有使用正则化。速度快得惊人,估计和内部二进制实现速度差不多,在IE和Firefox中也有不错的表现(其他浏览器当然不用怀疑)。速度大约是零毫秒。
实现11
string . prototype . trim=function(){
var str=this,
str=str.replace(/^s /, );
for(var I=str . length-1;I=0;我- ) {
if (/S/)。test(str.charAt(i))) {
str=str.substring(0,I 1);
打破;
}
}
返回字符串;
}
实现10已经告诉我们,常见的原生字符串截取方法远优于常规替换,虽然有点复杂。但只要规律性不太复杂,我们可以利用浏览器优化规律性,提高程序执行效率,比如在IE中实现8的性能。我觉得一般不会有人在项目中应用implementation 10,因为那个whitespace实现太长太难记了(当然如果是构建类库的话肯定是第一个)。实现11可以被描述为它的改进版本。前面部分的空白用常规替换的方式切割,后面部分用原生方法处理。效果不逊于原版,但是速度很差。
实现12
string . prototype . trim=function(){
var str=this,
str=str.replace(/^ss*/,),
ws=/s/,
i=str.length
while(ws . test(str . charat(-I));
返回str.slice(0,I 1);
}
实现10和实现11在文字上是更好的改进版本。请注意,它们不是关于性能速度,而是易于记忆和使用。而它的两个前辈都是零毫秒级别的,以后就用这个来干活吓唬人。
JS(去掉前后空格或去掉所有空格)的用法
1.删除字符串前后的所有空格:
代码如下:
函数修剪(字符串){
返回str.replace(/(^s*)|(s*$)/g,“);
}
描述:
如果您使用jQuery,您可以只使用$。trim(str)方法。STR表示去掉前后所有空格的字符串。
2.去掉字符串中的所有空格(包括中间的空格,第二个参数需要设置为:g)
代码如下:
函数Trim(str,is_global){
var结果;
result=str.replace(/(^s)|( s $)/g, );
if(is_global.toLowerCase()==g )
{
result=result.replace(/s/g, );
}
返回结果;
}