给定一个这样的字符串:
"The dog has a long tail, and it is RED!"
什么样的jQuery或JavaScript魔法可以用来保持空间只有一个最大空间?
目标:
"The dog has a long tail, and it is RED!"
给定一个这样的字符串:
"The dog has a long tail, and it is RED!"
什么样的jQuery或JavaScript魔法可以用来保持空间只有一个最大空间?
目标:
"The dog has a long tail, and it is RED!"
当前回答
假设你还想覆盖制表符、换行符等,只需将\s\s+替换为' ':
string = string.replace(/\s\s+/g, ' ');
如果你真的只想覆盖空格(而不是制表符,换行符等),可以这样做:
string = string.replace(/ +/g, ' ');
其他回答
var str = "The dog has a long tail, and it is RED!";
str = str.replace(/ {2,}/g,' ');
编辑: 如果你想替换所有类型的空白字符,最有效的方法是这样的:
str = str.replace(/\s{2,}/g,' ');
我知道我们必须使用正则表达式,但在一次采访中,我被要求不要使用正则表达式。
@slightlytyler帮助我提出了下面的方法。
const testStr = "I LOVE STACKOVERFLOW LOL"; const removeSpaces = str => { Const chars = str.split("); const nextChars = char .reduce( (acc, c) => { If (c === ' ') { const lastChar = acc[acc.]长度- 1]; if (lastChar === ' ') { 返回acc; } } 返回[…acc, c]; }, [], ); const nextStr = nextchar .join("); 返回nextStr }; console.log (removeSpaces (testStr));
我建议
string = string.replace(/ +/g," ");
对于空格或
string = string.replace(/(\s)+/g,"$1");
还可以将多个退货转换为单个退货。
全面的未加密的回答新手等。
这是写给所有像我这样的傻瓜,他们测试了你们中一些人写的不工作的脚本。
以下3个例子是我在以下3个网站上删除特殊字符和额外空格的步骤(所有这些都工作得很好){1。EtaVisa.com 2。EtaStatus.com 3。Tikun.com},所以我知道这些工作完美。
我们已经将这些连接在一起,一次超过50个,没有问题。
//删除特殊字符+ 0-9,只允许字母(大写和小写)
function NoDoublesPls1()
{
var str=document.getElementById("NoDoubles1");
var regex=/[^a-z]/gi;
str.value=str.value.replace(regex ,"");
}
//删除特殊字符,只允许字母(大写和小写)和0-9个and空格
function NoDoublesPls2()
{
var str=document.getElementById("NoDoubles2");
var regex=/[^a-z 0-9]/gi;
str.value=str.value.replace(regex ,"");
}
//删除特殊字符,只允许字母(大写和小写)和0-9个and空格 //结尾的.replace(/\s\s+/g, " ")去掉了多余的空格 //当我使用单引号时,它不起作用。
function NoDoublesPls3()
{ var str=document.getElementById("NoDoubles3");
var regex=/[^a-z 0-9]/gi;
str.value=str.value.replace(regex ,"") .replace(/\s\s+/g, " ");
}
:::: 将#3保存为.js //我将我的命名为NoDoubles.js
:::: 将JS包含在页面中
<script language="JavaScript" src="js/NoDoubles.js"></script>
包括在你的表单字段::such as
<INPUT type="text" name="Name"
onKeyUp="NoDoublesPls3()" onKeyDown="NoDoublesPls3()" id="NoDoubles3"/>
它看起来是这样的
<INPUT type="text" name="Name" onKeyUp="NoDoublesPls3()" onKeyDown="NoDoublesPls3()" id="NoDoubles3"/>
这将删除特殊字符,允许单个空格和删除额外的空格。
既然你似乎对性能很感兴趣,我用firebug分析了一下。以下是我得到的结果:
str.replace( / +/g, ' ' ) -> 380ms
str.replace( /\s\s+/g, ' ' ) -> 390ms
str.replace( / {2,}/g, ' ' ) -> 470ms
str.replace( / +/g, ' ' ) -> 790ms
str.replace( / +(?= )/g, ' ') -> 3250ms
这是在Firefox上,运行100k字符串替换。
如果您认为性能是个问题,我鼓励您使用firebug进行自己的分析测试。众所周知,人类不善于预测程序的瓶颈所在。
(另外,请注意,IE 8的开发者工具栏也有内置的分析器——它可能值得检查在IE中的性能是什么样的。)