给出如下字符串:
"The dog has a long tail, and it is RED!"
什么样的jQuery或JavaScript魔法可用于将空间最多只保留一个空间?
目标:
"The dog has a long tail, and it is RED!"
BalusC.. 835
鉴于您还想要覆盖制表符,换行符等,只需替换\s\s+
为' '
:
string = string.replace(/\s\s+/g, ' ');
如果你真的想要只覆盖空格(因此不是选项卡,换行符等),请执行以下操作:
string = string.replace(/ +/g, ' ');
@Ethan:JS有一个内置函数:`trim()`.它比正则表达式更快.你可以做`string.trim().replace(/\s\s +/g,'');`或`string.replace(/\s\s +/g,'').trim();`. (5认同)
您还需要在正则表达式中添加"g"标志. (4认同)
当需要空白而不是制表符或换行符时,这不起作用.对?/\s + /会起作用. (4认同)
作为函数,例如`function removeExtraSpaces(string){return string.replace(/\s {2,}/g,'');},这对你来说可能更好. (3认同)
除非有至少两个相邻字符,否则// s \ s + / g和`/ \ s {2,} / g`不匹配空格字符,例如将匹配\ t \ t但不匹配单个\ t。string.replace(/ \ s + / g,'')将匹配所有单个和多个空格字符子字符串,并替换为单个空格。 (3认同)
这是否也删除了whitespacy制表符? (2认同)
@nobosh:是的,它用空格字符替换所有空白字符(空格,制表符,\ r,\n,\n\v\f). (2认同)
Edward Loper.. 156
由于你似乎对性能感兴趣,我用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中的性能.)
鉴于您还想要覆盖制表符,换行符等,只需替换\s\s+
为' '
:
string = string.replace(/\s\s+/g, ' ');
如果你真的想要只覆盖空格(因此不是选项卡,换行符等),请执行以下操作:
string = string.replace(/ +/g, ' ');
由于你似乎对性能感兴趣,我用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中的性能.)
var str = "The dog has a long tail, and it is RED!"; str = str.replace(/ {2,}/g,' ');
编辑: 如果你想替换所有类型的空白字符,最有效的方式是这样的:
str = str.replace(/\s{2,}/g,' ');
这是一个解决方案,但它将针对所有空格字符:
"The dog has a long tail, and it is RED!".replace(/\s\s+/g, ' ') "The dog has a long tail, and it is RED!"
编辑:这可能更好,因为它的目标是一个空格后跟一个或多个空格:
"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+/
单独使用,因为它取代了多次跨越1个字符的空格,并且可能效率较低,因为它的目标超出了必要的范围.
如果有错误,我没有深入测试任何这些lmk.
此外,如果您要进行字符串替换,请记住将变量/属性重新分配给自己的替换,例如:
var string = 'foo' string = string.replace('foo', '')
使用jQuery.prototype.text:
var el = $('span:eq(0)'); el.text( el.text().replace(/\d+/, '') )
我有这个方法,我称之为Derp方法缺乏一个更好的名字.
while (str.indexOf(" ") !== -1) { str = str.replace(/ /g, " "); }
在JSPerf中运行它会产生一些令人惊讶的结果.
一个更健壮的方法:如果它们存在,它还负责删除初始和尾随空格.例如:
// 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 !"
您的例子没有这些空间,但他们是一个非常常见的情况也和接受的答案只是修剪那些成单个空格,如:"在... RED",这是不是你通常需要.
更强大:
function trim(word) { word = word.replace(/[^\x21-\x7E]+/g, ' '); // change non-printing chars to spaces return word.replace(/^\s+|\s+$/g, ''); // remove leading/trailing spaces }
我建议
string = string.replace(/ +/g," ");
只是空格
或
string = string.replace(/(\s)+/g,"$1");
用于将多个退货转换为单个退货.
如果您不想使用replace(在不使用replace javascript的情况下替换字符串中的空格),这是一个替代解决方案
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);
我知道我迟到了,但我发现了一个很好的解决方案.
这里是:
var myStr = myStr.replace(/[ ][ ]*/g, ' ');
newbies等人的全面未加密答案.
这适用于像我这样的所有虚拟测试人员,他们会测试一些不能工作的人编写的脚本.
以下3个示例是我在以下3个网站上删除特殊字符和额外空格的步骤(所有这些都完美无缺){1.EtaVisa.com 2. EtaStatus.com 3. Tikun.com}所以我知道这些工作完美.
我们将这些链接在一起超过50个,没有任何问题.
//这删除了特殊字符+ 0-9并且只允许字母(大写和LOWER大小写)
function NoDoublesPls1() { var str=document.getElementById("NoDoubles1"); var regex=/[^a-z]/gi; str.value=str.value.replace(regex ,""); }
//这删除了特殊字符,只允许字母(大写和LOWER大小写)和0-9 AND空格
function NoDoublesPls2() { var str=document.getElementById("NoDoubles2"); var regex=/[^a-z 0-9]/gi; str.value=str.value.replace(regex ,""); }
//这删除了特殊字符,只允许字母(大写和LOWER大小写)和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, " "); }
:: NEXT ::
将#3保存为a .js
//我打电话给我的NoDoubles.js
:: NEXT :: 将您的JS包含在您的页面中
将其包含在您的表单字段::例如
所以它看起来像这样
这将删除特殊字符,允许单个空格并删除多余的空格.