正则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!"
希望这有助于达到目的