给定一个像这样的字符串:
“狗尾巴很长,而且是红色的!”
什么样的jQuery或JavaScript魔术可以用来将空间限制为最多一个空间?
目标:
“狗尾巴很长,而且是红色的!”
str.replace(/ +(?= )/g,'');
您不需要替换任何不必要的东西。
给定一个像这样的字符串:
“狗尾巴很长,而且是红色的!”
什么样的jQuery或JavaScript魔术可以用来将空间限制为最多一个空间?
目标:
“狗尾巴很长,而且是红色的!”
str.replace(/ +(?= )/g,'');
您不需要替换任何不必要的东西。
Answers:
假设您还想覆盖标签,换行符等,只需替换\s\s+
为' '
:
string = string.replace(/\s\s+/g, ' ');
如果您真的只想覆盖空格(而不是制表符,换行符等),请这样做:
string = string.replace(/ +/g, ' ');
function removeExtraSpaces(string){ return string.replace(/\s{2,}/g, ' ');}
trim()
。它比正则表达式快。您可以这样做string.trim().replace(/\s\s+/g, ' ');
或string.replace(/\s\s+/g, ' ').trim();
。
/\s\s+/g
并且/\s{2,}/g
不匹配空格字符,除非彼此至少相邻两个,例如将匹配\ t \ t但不匹配单个\ t。string.replace(/\s+/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上运行的10万个字符串替换。
如果您认为性能存在问题,建议您使用Firebug进行性能分析测试。众所周知,人类无法预测程序瓶颈所在。
(还要注意,IE 8的开发人员工具栏还内置了一个探查器-可能值得检查IE中的性能。)
( / +(?= )/g, ' ');
在IE9中失败,它留下了两个空格:"Foo Bar Baz".replace(/ +(?= )/g, ' ');
->"Foo Bar Baz"
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个字符的空格,而且效率可能会更低,因为它的定位超出了必要。
如果有错误,我不会对所有这些进行深入测试。
另外,如果要进行字符串替换,请记住将变量/属性重新分配给它自己的替换,例如:
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, " ");
}
更加健壮的方法:如果存在初始和尾随空格,它也将删除它们。例如:
// 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!”,这通常不是您所需要的。
我建议
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, " ");
}
:: NEXT ::
将#3另存为a .js
// //我叫我NoDoubles.js
:: NEXT :: 将JS包含在页面中
<script language="JavaScript" src="js/NoDoubles.js"></script>
将此包含在您的表单字段中::例如
<INPUT type="text" name="Name"
onKeyUp="NoDoublesPls3()" onKeyDown="NoDoublesPls3()" id="NoDoubles3"/>
这样看起来像这样
<INPUT type="text" name="Name" onKeyUp="NoDoublesPls3()" onKeyDown="NoDoublesPls3()" id="NoDoubles3"/>
这将删除特殊字符,允许使用单个空格并删除多余的空格。
var string = "The dog has a long tail, and it is RED!";
var replaced = string.replace(/ +/g, " ");
或者,如果您也想替换标签:
var replaced = string.replace(/\s+/g, " ");
jQuery具有trim()函数,该函数基本上将类似“ FOo Bar”的内容转换为“ FOo Bar”。
var string = " My String with Multiple lines ";
string.trim(); // output "My String with Multiple lines"
它更有用,因为它会自动删除字符串开头和结尾的空格。无需正则表达式。
我们可以使用以下sed system命令解释的正则表达式。类似的正则表达式可以在其他语言和平台中使用。
将文本添加到一些文件中说测试
manjeet-laptop:Desktop manjeet$ cat test
"The dog has a long tail, and it is RED!"
我们可以使用以下正则表达式将所有空格替换为单个空格
manjeet-laptop:Desktop manjeet$ sed 's/ \{1,\}/ /g' test
"The dog has a long tail, and it is RED!"
希望这能达到目的
尝试使用单个空格替换多个空格。
<script type="text/javascript">
var myStr = "The dog has a long tail, and it is RED!";
alert(myStr); // Output 'The dog has a long tail, and it is RED!'
var newStr = myStr.replace(/ +/g, ' ');
alert(newStr); // Output 'The dog has a long tail, and it is RED!'
</script>
阅读更多@ 用单个空格替换多个空格
为了获得更多控制,您可以使用replace回调来处理该值。
value = "tags:HUNT tags:HUNT tags:HUNT tags:HUNT"
value.replace(new RegExp(`(?:\\s+)(?:tags)`, 'g'), $1 => ` ${$1.trim()}`)
//"tags:HUNT tags:HUNT tags:HUNT tags:HUNT"
此脚本删除单词和修饰之间的所有空白(多个空格,制表符,返回等):
// Trims & replaces any wihtespacing to single space between words
String.prototype.clearExtraSpace = function(){
var _trimLeft = /^\s+/,
_trimRight = /\s+$/,
_multiple = /\s+/g;
return this.replace(_trimLeft, '').replace(_trimRight, '').replace(_multiple, ' ');
};
我知道我们必须使用正则表达式,但是在一次采访中,我被要求不要使用正则表达式。
@slylytyler帮助我采用了以下方法。
const testStr = "I LOVE STACKOVERFLOW LOL";
const removeSpaces = str => {
const chars = str.split('');
const nextChars = chars.reduce(
(acc, c) => {
if (c === ' ') {
const lastChar = acc[acc.length - 1];
if (lastChar === ' ') {
return acc;
}
}
return [...acc, c];
},
[],
);
const nextStr = nextChars.join('');
return nextStr
};
console.log(removeSpaces(testStr));