正则expression式用一个空格replace多个空格

给定一个string如:

  “狗长长的尾巴,它是红色的!” 

什么样的jQuery或JavaScript魔术可以用来保持空间只有一个空间最大?

目标:

  “狗长长的尾巴,它是红色的!” 

鉴于你也想覆盖制表符,换行符等,只要用\s\s+ ' 'replace\s\s+

 string = string.replace(/\s\s+/g, ' '); 

如果你真的只想覆盖空格(不包括制表符,换行符等),那就这样做:

 string = string.replace(/ +/g, ' '); 

既然你对表演很感兴趣,我就用萤火虫把它们描绘出来。 这是我得到的结果:

 str.replace( / +/g, ' ' ) -> 790ms str.replace( / +/g, ' ' ) -> 380ms str.replace( / {2,}/g, ' ' ) -> 470ms str.replace( /\s\s+/g, ' ' ) -> 390ms str.replace( / +(?= )/g, ' ') -> 3250ms 

这是在Firefox上,运行10万个stringreplace。

如果您认为性能是一个问题,我鼓励您使用萤火虫做自己的分析testing。 人们在预测程序中的瓶颈在哪里是非常糟糕的。

(另外请注意,IE 8的开发者工具栏也内置了一个profiler,可能值得检查一下IE中的性能。)

 var str = "The dog has a long tail, and it is RED!"; str = str.replace(/ {2,}/g,' '); 

编辑:如果你想要replace所有types的空白字符最有效的方式将是这样的:

 str = str.replace(/\s{2,}/g,' '); 

这是一个解决scheme,虽然它将针对所有的空间angular色:

 "The dog has a long tail, and it is RED!".replace(/\s\s+/g, ' ') "The dog has a long tail, and it is RED!" 

编辑 :这可能是更好的,因为它的目标是1个或更多的空间后面:

 "The dog has a long tail, and it is RED!".replace(/ +/g, ' ') "The dog has a long tail, and it is RED!" 

替代方法:

 "The dog has a long tail, and it is RED!".replace(/ {2,}/g, ' ') "The dog has a long tail, and it is RED!" 

我自己没有使用/\s+/ ,因为它replace了多次跨越1个字符的空格,并且可能效率更低,因为它的目标超出了必要的范围。

如果有bug的话,我没有深入地testing过这些。

另外,如果你要做stringreplace,记得重新分配variables/属性到自己的replace,例如:

 var string = 'foo' string = string.replace('foo', '') 

使用jQuery.prototype.text:

 var el = $('span:eq(0)'); el.text( el.text().replace(/\d+/, '') ) 

我有这个方法,我把它叫做Derp方法,因为缺less一个更好的名字。

 while (str.indexOf(" ") !== -1) { str = str.replace(/ /g, " "); } 

在JSPerf中运行它会产生令人惊讶的结果。

更强大:

 function修剪(字)
 {
     word = word.replace(/ [^ \ x21- \ x7E] + / g,'');  //将非打印字符更改为空格
     return word.replace(/ ^ \ s + | \ s + $ / g,'');  //删除前导/尾随空格
 }

我build议

 string = string.replace(/ +/g," "); 

只是空间
要么

 string = string.replace(/(\s)+/g,"$1"); 

将多个收益转化为单一收益。

一个更强大的方法:这照顾删除初始和尾随空格,如果它们存在。 例如:

 // NOTE the possible initial and trailing spaces var str = " The dog has a long tail, and it is RED! " str = str.replace(/^\s+|\s+$|\s+(?=\s)/g, ""); // str -> "The dog has a long tail, and it is RED !" 

你的例子没有这些空间,但它们也是一个非常普遍的场景,接受的答案是把那些空间修剪成单个空间,比如:“The … RED!”,这不是你通常需要的。

如果您不想使用replace(replacestring中的空格而不使用replaceJavaScript)

 var str="The dog has a long tail, and it is RED!"; var rule=/\s{1,}/g; str = str.split(rule).join(" "); document.write(str); 

还有一种可能性:

 str.replace( /\s+/g, ' ' ) 

全面的未encryption的答案新手等。

对于像我这样的所有傻瓜来说,这些都是由你们中的一些人所写的脚本来testing的。

下面的3个例子是我为了移除以下3个网站上的特殊字符和额外空间而采取的步骤(所有这些都是完美的){1。 EtaVisa.com 2. EtaStatus.com 3. Tikun.com}所以我知道这些工作完美。

我们把这些连在一起超过50个,没有问题。

/ /这删除了特殊字符+ 0-9,只允许字母(上和下情况)

 function NoDoublesPls1() { var str=document.getElementById("NoDoubles1"); var regex=/[^az]/gi; str.value=str.value.replace(regex ,""); } 

/ /这删除了特殊字符,只允许字母(上和低情况)和0-9空格

 function NoDoublesPls2() { var str=document.getElementById("NoDoubles2"); var regex=/[^az 0-9]/gi; str.value=str.value.replace(regex ,""); } 

/ /这删除了特殊字符,只允许字母(大写和小写的情况下)和0-9和空格/ /最后.replace(/ \ s \ s + / g,“”)删除过多的空间//当我使用单引号,它没有工作。

 function NoDoublesPls3() { var str=document.getElementById("NoDoubles3"); var regex=/[^az 0-9]/gi; str.value=str.value.replace(regex ,"") .replace(/\s\s+/g, " "); } 

:: NEXT ::将#3保存为.js //我调用了我的NoDoubles.js

:: NEXT ::包含你的JS到你的页面中<script language =“JavaScript”src =“js / NoDoubles.js”> </ script>

:: NEXT ::包含这个在你的表单字段::如<INPUT type =“text”name =“Name”> string onKeyUp =“NoDoublesPls3()”onKeyDown =“NoDoublesPls3()”id =“NoDoubles3”

所以它看起来像这样<INPUT type =“text”name =“Name”onKeyUp =“NoDoublesPls3()”onKeyDown =“NoDoublesPls3()”id =“NoDoubles3”>

这将删除特殊字符,允许单个空格并删除多余的空格。

我知道我迟到了,但是我发现了一个很好的解决办法。

这里是:

 var myStr = myStr.replace(/[ ][ ]*/g, ' '); 

jQuery的trim()函数基本上把这个“FOo Bar”变成了“FOo Bar”。

 var string = " My String with Multiple lines "; string.trim(); // output "My String with Multiple lines" 

它更加有用,因为它自动删除string开头和结尾的空格。 不需要正则expression式。

 var myregexp = new RegExp(/ {2,}/g); str = str.replace(myregexp,' '); 
 var string = "The dog has a long tail, and it is RED!"; var replaced = string.replace(/ +/g, " "); 

或者,如果您还想要replace标签:

 var replaced = string.replace(/\s+/g, " "); 

我们可以使用sed system命令的帮助来解释下面的正则expression式。 类似的正则expression式可以用于其他语言和平台。

添加文本到一些文件说testing

 manjeet-laptop:Desktop manjeet$ cat test "The dog has a long tail, and it is RED!" 

我们可以使用下面的正则expression式来replace单个空格的所有空格

 manjeet-laptop:Desktop manjeet$ sed 's/ \{1,\}/ /g' test "The dog has a long tail, and it is RED!" 

希望这有助于达到目的